【发布时间】:2018-10-31 10:58:56
【问题描述】:
我有一组可以单独更新的文本区域,并且可以保存或丢弃更改。每个文本区域都由一个对象表示,以跟踪更改并启用/禁用某些按钮。一切正常,但丢弃后,对象没有改变,但视图没有更新。它只会在我更改对象内部的某些内容时更新,因此我尝试制作对象的“真实”副本并将这些值分配给实际对象,但这也不起作用。 到目前为止我的代码:
HTML:
<ng-container *ngFor="let itemId of itemIds">
<div>
<div>
<textarea #message (keydown)="enableButton(itemId)" rows="5" cols="50"[(value)]="getMessageDetails(itemId).message"></textarea>
</div>
</div>
<div>
<button [disabled]="!getMessageDetails(itemId).changedText" (click)="saveMessageChanges(itemId, message.value)">Save Changes</button>
<button [disabled]="!getMessageDetails(itemId).changedText" (click)="discardChanges(itemId)">Discard Changes</button>
</div>
</ng-container>
组件:
itemIds = [2,4];
myMessages = [
{
id: 2,
message: 'hello',
changedText: false
},
{
id: 4,
message: 'world',
changedText: false
}
]
enableButton(itemId){
this.myMessages.map( y => {if (y.id === itemId) {
y.changedText = true;
}});
}
getMessageDetails(itemId){
let myMessage = this.myMessages.find(y => y.id === itemId);
return myMessage;
}
saveMessageChanges(itemId, message){
this.myMessages.map( y => {if (y.id === itemId) {
y.message = message;
y.changedText = false;
}});
}
discardChanges(itemId){
let tempMessage = Object.assign({},(this.myMessages.find(y => y.id === itemId)));
let myMessage = this.myMessages.find(y => y.id === itemId);
myMessage.changedText = false;
myMessage.message = tempMessage.message; // <- no object change detected
//myMessage.message = " " + tempMessage.message; // <- this works
return myMessage;
}
每当我在消息中添加空格时,它都会起作用。
我在这里创建了一个堆栈闪电战: https://stackblitz.com/edit/angular-m5dbj4
【问题讨论】:
标签: angular angular-components