【问题标题】:Angular2 - How to use one way databinding to bind to JSON attributeAngular2 - 如何使用一种方式数据绑定绑定到 JSON 属性
【发布时间】:2016-04-03 10:18:02
【问题描述】:

我尝试使用 Angular2 的一种数据绑定方式将输入字段值绑定到 JSON 属性。
JSON 对象如下所示:

[
  {
    "name": "my name",
    "list": [
      {
        "date": "0101970",
        "list": [
          {
            "timespan": "6-7",
            "entries": [
              {
                "name": ""
              },
              {
                "name": ""
              },
              {
                "name": ""
              }
            ]
          }
        ]
      }
    ]
  }
]

我想将该值绑定到entries 的特定name 属性。
这就是我尝试进行途中绑定的方式:

<div class="col-md-4" *ngFor="#category of categories">
        <div>
            <div class="col-md-12">
                <h1>{{category.name}}</h1>
            </div>
        </div>
        <div *ngFor="#listentry of category.list">
            <div class="row">
                <div class="col-md-12">
                    <h2>{{listentry.date}}</h2>
                </div>
            </div>

            <div class="row" *ngFor="#shift of listentry.list">
                <div class="row">
                    {{shift.timespan}}
                </div>
                <div class="row" *ngFor="#entry of shift.entries">
                    <div class="col-md-10">
                        <input type="text" class="form-control" (ngModel)="entry.name">
                    </div>
                </div>
            </div>
        </div>
    </div> 

这是我的组件:

export class InputComponent {

public categories:Category[];

constructor(private _dataService:DataService) { 
 // ... fetch data from the service here
}
}

据我了解,Angular2 中的数据绑定 (ngModel)="attribute" 从视图绑定到模型,[ngModel]="attribute" 以相反的方式绑定。
那么,我的&lt;input type="text" class="form-control" (ngModel)="entry.name"&gt; 有什么问题呢?

当然,我可以使用两种方式的数据绑定,但我还有一些其他限制(禁用表单元素),这些限制仅在按下按钮后应用,而不适用于用户输入。

【问题讨论】:

    标签: json angular 2-way-object-databinding


    【解决方案1】:

    <input type="text" class="form-control" [ngModel]="entry.name">
    

    您将 JSON 值绑定到输入。

    (ngModelChange)="model=$event" updates the model when an `ngModelChange` event is emitted.
    
    [(ngModel)]="model" binds two-way 
    

    其中ngModel 是一个带有

    的指令
    @Input() ngModel; // for the [ngModel]="..." bindign
    @Output() ngModelChange = EventEmitter(); // for the (ngModelChange)="..." binding
    

    它们共同支持简写形式

    [(ngModel)]="model"
    

    【讨论】:

    • 感谢您的回答,但将(ngModelChange)="model=$event" 添加到输入元素不起作用。此外,没有错误消息。正如我之前所说,由于其他限制,我不能使用[(ngModel)]="model"。我只想将输入绑定到模型。如果模型发生变化,我不想更新视图。
    • 如果你不想或不能使用ngModel,那么你需要像&lt;input (change)="model=$event.target.value"&gt;一样监听输入元素本身的事件(或者像@这样的输入发出的任何其他事件) 987654331@, (keypress), ... (ngModel) 不会做任何事情,因为没有 ngModel 事件。[(ngModel)] 只能工作,因为这是一种特殊形式,其中 [xxx]="model"(xxxChange)="model=$event" 可以组合成[(xxx)]="model"
    • 谢谢!我认为 ngModel 可以完成这项工作......我现在使用(更改)。
    猜你喜欢
    • 2016-02-27
    • 2022-07-31
    • 1970-01-01
    • 2019-04-12
    • 2016-06-08
    • 2012-09-10
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多