当前位置: 首页 > 知识库问答 >
问题:

Angular2 - 如何将 ngModel 值设置为输入的值

荆利
2023-03-14

组件:

export class AccountComponent implements OnInit {
  public error: any;
  currentUser = {};

  constructor(private afService: AF) {
    afService.getCurrentUserInfo().then(currentUserDetails => {
      this.currentUser = currentUserDetails;
    });
  }

  updateUserEntry(fname, lname, phone, bio) {

    this.afService.getCurrentUserInfo().then((user) => {
      let details = [];
      details.push(user);
      console.log(details[0].userID);
      this.afService.updateUserEntry(details[0].userID, fname, lname, phone, bio).then(() => {
        console.log("Updated entry");
      })
      .catch((error) => {
        this.error = error;
        console.log("error");
      });
    });
  }

  ngOnInit() {
  }

}

表单:

<form>
        <dl class="form-group">
          <dt><label>First Name</label></dt>
          <dd><input [(ngModel)]="currentUser.firstName" name="fname" class="form-control" type="text"></dd>
        </dl>

        <dl class="form-group">
          <dt><label>Last Name</label></dt>
          <dd><input [(ngModel)]="currentUser.lastName" name="lname" class="form-control" type="text"></dd>
        </dl>

        <dl class="form-group">
          <dt><label>Email</label></dt>
          <dd><input [(ngModel)]="currentUser.email" name="email" class="form-control" type="email" disabled></dd>
        </dl>

        <dl class="form-group">
          <dt><label>Mobile Phone</label></dt>
          <dd><input [(ngModel)]="currentUser.phone" name="phone" class="form-control" type="text"></dd>
        </dl>

        <dl class="form-group">
          <dt><label>Bio</label></dt>
          <dd>
            <textarea [(ngModel)]="currentUser.bio" name="bio" class="form-control"></textarea>
          </dd>
        </dl>

        <div class="form-actions">
          <button type="button" class="btn btn-primary" (click)="updateUserEntry(fname, lname, phone, bio)">Save changes</button>
        </div>
      </form>

该函数更新一个JSON记录。例如,它用“fname”ng model更新“firstName:”条目。问题是,除非用户修改输入的值,否则ngModel被读取为null,即使已经存在< code > value = " { { current user . first name } } " 的值。

如何设置 ngModel 以从实际输入的值=“”解释其值?

共有1个答案

长孙阳焱
2023-03-14

您不需要使用不同的变量,如fname,直接为ngModel传递currentUser.firstName

<input 
  type="text"
  [(ngModel)]="currentUser.firstName" 
  name="fname" 
  class="form-control">

但是,如果我的理解是错误的,并且您想使用currentUser.firstName初始化fname,请在组件中执行此操作。

this.fname = currentUser.firstName

并在html

 <input 
      type="text"
      [(ngModel)]="fname" 
      name="fname" 
      class="form-control">

在文本类型的情况下,不要同时使用 ngModel 和值,它们相互矛盾(检查下面的评论)。

完成代码段后更新

要使您当前的代码正常工作,请执行以下更改:

> < li>

将类型赋予< code>currentUser like

< code > public current user:any = { };

移除< code>updateUserEntry中的参数,但从< code>this.currentUser中获取值

this.afService.updateUserEntry(
    details[0].userID, 
    this.currentUser.fname,
    this.currentUser.lname,
    this.currentUser.phone, 
    this.currentUser.bio)

更好的方法

但是我相信你把事情复杂化了。在我看来,除非你需要双向数据绑定,否则不要使用ngModel。请使用thoughtram中的FormGroup示例

 类似资料:
  • 我想通过Selenium设置日期值。 我正在处理这个页面

  • 问题内容: 注意: 以下答案与评论反映了2009年旧版浏览器的状态。现在,您实际上可以在2017年使用JavaScript和dataTransfer或FileList对象动态/以编程方式设置文件输入元素的值。 有关详细信息和演示,请参见此问题的答案: 如何以编程方式设置文件输入值(即:拖放文件时)? 如何设置此值? 问题答案: 由于安全原因,您不能。 想像: 您不希望所访问的网站能够做到这一点,对

  • 问题内容: 注意: 以下答案与评论反映了2009年旧版浏览器的状态。现在,您实际上可以在2017年使用JavaScript和dataTransfer或FileList对象动态/以编程方式设置文件输入元素的值。 如何设置此值? 问题答案: 由于安全原因,您不能。 想像: 您不希望所访问的网站能够做到这一点,对吗?

  • 假设我在功能组件中创建了一个变量,如下所示: 如何根据用户输入的内容更改此值。我的想法是: 但是它不知道什么是值,我怎么能得到值到我的quizName变量?

  • 大家好,我有代码主和tictactoe类 这里是main类的示例。在这段代码中,我输入了类似字符串号的内容 这是为我的tictactoe程序班准备的。如果我运行这个代码,我只有3x3tictactoe程序,所以我想用我的输入修改其中一个代码,这样我的tictactoe将输入x输入 我的问题是我想改变这个领域 成为 公共静态最终int行=输入;//行按COLS单元格public static fin

  • 问题内容: 但它不起作用,如何设置默认值? 问题答案: 日期应采用格式。一位数的日期和月份应填充0。一月是01。 从文档中: 代表日期的字符串。 值:RFC3339中定义的有效完整日期,另外具有年份部分为四位或更多位数字表示大于0的数字的资格。 您的代码应更改为: