【问题标题】:Two way data binding - ngModel双向数据绑定 - ngModel
【发布时间】:2017-11-15 23:20:56
【问题描述】:

在下面的angular2组件中,

export class HomeComponent implements OnInit {
  homeTitle = "Welcome to the home page";
  myString = "I like red";
  myBoolean = false;

  alertMe(val){
    alert(val);
  }

  obj = {
    name: "Yoshi",
    belt: "Black"
  };

  constructor() { }

  ngOnInit() {
  }

}

双向数据绑定不适用于下面的视图,

<p>
  {{homeTitle}}
</p>

<!--  Property binding -->

<!-- input value="Hai" -->
<input [value]="myString">
<input [required]="myBoolean">

<button (click)="alertMe('I like x')">Click me</button>

<hr>
<!-- All above elements are working fine -->

<!-- 2 way data binding -->
<input [(ngModel)]="obj.name">
<p>{{obj.name}}</p>
<p>{{obj.belt}}</p>

为什么obj.name 不在输入元素中呈现?

【问题讨论】:

    标签: angular angular2-template angular2-forms


    【解决方案1】:

    在您的模块中添加FormsModule

    import { FormsModule } from '@angular/forms';
    imports: [
      ..
      FormsModule
    ]
    

    【讨论】:

    • 不确定,什么模块?我只写了一个组件。在完整的源代码树中,我看到了app.module.ts
    • 你声明组件的模块,因为你写了一个组件,所以它是AppModule
    • 为什么双向数据绑定需要Formsmodule?为什么 Angular 不会自动添加这个模块?没有此模块的一种方式数据绑定工作正常
    • FormsModule 是必需的,因为它为表单元素提供了额外的指令......,它有效吗?
    • ngModel 指令属于FormsModule,这就是你应该导入它的原因。此后,您可以在页面上使用 ngModel 指令。您可以查看文档以获取更多信息:angular.io/api/forms/NgModel
    【解决方案2】:

    对不起,我现在看到了。你必须在输入中指定name="myModelName"

    点赞&lt;input name="myModelName" [(ngModel)]="obj.name"&gt;

    【讨论】:

    • 使用 name 属性它不起作用。为什么它应该起作用? name 只是一个 html 原生属性
    • 来自 Angular DOCS:When using the ngModel within &lt;form&gt; tags, you'll also need to supply a name attribute so that the control can be registered with the parent form under that name. 你有它在
      中吗?
    • 你能把你的导入{}粘贴到 .ts 文件中吗?--- 正如@Mohamed Ali RACHID 所说,在 ts 文件中验证你的导入
    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 2016-10-12
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2017-08-28
    相关资源
    最近更新 更多