有人可以研究这个吗?我需要在按钮上单击对象将数据存储在对象中。然后必须在视图上显示。同样,如果用户在下拉列表中选择其他值并在文本框中输入数据,则在按钮单击时,同样,数据需要存储在同一对象中,而无需清除先前存储的值。
现在,我能够将vaue存储在对象中并显示。但是我遇到的问题是,它在单击按钮中将相同的值存储两次。如果我选择另一个值,那么上一个值将被新值覆盖但是阵列的大小正在增加而没有清除。
有人可以告诉我我要在哪里做错了吗?
这是我的HTML文件。
<md-select [placeholder]="result" [(ngModel)]="selectedItemType">
<md-option *ngFor='let attr of result' [value]="attr.fieldType" ng-selected="attr.fieldType"> {{attr.attribute}}
</md-option>
</md-select>
</div>
<div *ngIf="selectedItemType =='string' || selectedItemType =='decimal' || selectedItemType == 'text' || selectedItemType == 'integer'">
<input placeholder="Enter Text" type="text" class="input" [(ngModel)]="txtEntered">
</div>
<button *ngIf="selectedItemType" md-raised-button (click)= "Add()" color="accent" >Add</button>
<span *ngFor='let selVal of finalValues'> {{selVal.attributeName}} {{selVal.value}}
</span>
这是我的打字稿类
export class test{
Add() {
this.addToList();
}
addToList() {
this.addValues.push(this.selectedItemType, this.txtEntered);
this.finalValues = this.addValues.map(({attributeName, value}) =>
new SelectedList(this.selectedItemType, this.txtEntered));
}
}
这是我的模型类
export class SelectedList {
constructor(
public attributeName: any,
public value: any
) {}
}
您的意思是 push
而不是在 addToList()
中?
this.addValues.push({ attributeName: this.selectedItemType, value: this.txtEntered });
this.finalValues = this.addValues.map((mapElem: {attributeName, value}) =>
new SelectedList(mapElem['attributeName'], mapElem['value']));
另外,如果您处于Angular 2或更高的领域,那么我认为ng-selected
的用法无效。您应该改用selected
(如果您动态分配[selected]
)。
看起来阿玛尔(Amal)的答案非常出色,因此您绝对可以选择。此外,这是一个工作中的工作,它实际上是他要指出的,尽管您肯定可以完全跳过this.addValues
,因为您最终想要的是Array<SelectedList>
plunk的相关代码:
Add() {
this.addToList();
}
addToList() {
this.finalValues.push(new SelectedList(this.selectedItemType, this.txtEntered));
}