如何仅使用ngmodel angular2

时间:2017-12-08 09:22:40

标签: angular typescript angular-ngmodel

我有一个数组和一个对象。在数组中,我从我的服务和对象中获取一个列表,我正在分配该数组的第一个元素。

feesEntries: Array<any> = [];
selectedFeesEntry: any;
clientList: Array<any> = [];

getData(data){
   this.feesEntries = JSON.parse(data['_body']);
   this.selectedFeesEntry = this.feesEntries[0];
}

在UI上从feesEntries数组中显示一个表。我有一个下拉菜单选择客户和我ClientList&amp;的选项ngModel用于将select绑定到selectedFeesEntry

样品:

<label class="control-label" for="select">Client Name</label>
    <div class="input-group">
        <select class="form-control" id="select" [(ngModel)]="selectedFeesEntry.client.name" name="selectedClientName" (change)="onClientNameChange(selectedFeesEntry.client.name)">
          <option *ngFor="let cl of clientList" [ngValue]="cl.name">{{cl.name}}</option>
        </select>
    </div>

现在的问题是,当我从选项中选择客户端时,使用ngmodel只应更新selectedFeesEntry,但在我的情况下,feesEntries也会更新。我不知道为什么会这样。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

据我了解,如果从下拉列表中选择了一个选项,则selectedFeesEntry会发生变化,因为您已经分配了selectedFeesEntry这样的内容,

this.selectedFeesEntry = this.feesEntries[0];

selectedFeesEntry只是this.feesEntries[0]的引用,换句话说,它是浅层副本

要执行深层复制,

this.selectedFeesEntry = JSON.parse(JSON.stringify(this.feesEntries[0]));

这将创建一个新对象

Example: Shallow Copy

Example: Deep copy

希望这有帮助