2017-04-13 64 views
0

比方說,我有一個像這樣一個簡單的數組對象:Angluar2 Observable UI - 更新對象數組中的子對象強制更改?

validationMessages = { 
    'name': [{ 
     'type': 'required', 
     'message': 'Name is required.', 
     'enabled': 1 
    }, 
    { 
     'type': 'maxlength', 
     'message': 'Name cannot be more than 50 characters long.', 
     'enabled': 0 
     }], 
    'description': [ 
     { 
      'type': 'required', 
      'message': 'Description is required.', 
      'enabled': 0 
     }, 
    ] 
}; 

我然後加載顯示在我的用戶界面,像這樣:

 <div *ngFor="let err of validationMessages.name"> 

      <div *ngIf="err.enabled == 1" class="alert alert-danger"> 


       {{err.message}} 
      </div> 
     </div> 

做工精細。

但是我想要做的就是能夠更新validationMessages.name數組來更新一個給定的對象來標記enabled 1或0.我希望這個更新/重新運行我的用戶界面。

我敢肯定,這可以通過觀測來完成,但我缺少什麼做到這一點?

回答

0

如果不修改某些事件(按一下按鈕,價值變動)或異步調用中的對象,你必須告訴角度所需的組件被刷新。

controller(private changeDetectorRef: ChangeDetectorRef) {} 
changeValidationMessages(): void { 
    this.validationMessages...enabled = 0; 
    this.changeDetectorRef.markForCheck(); 
} 

有沒有必要使用該觀測量,但如果你沒有,你可能會使用async管顯示的郵件。管道自己調用ChangeDetectorRef

(只要你想修改現有的創建新對象副本),確保模型的變化得到反映在UI使用不可變對象的其他方式,但同時也增加了一些複雜性。

角的變化檢測系統是值得了解更詳細的話題。您可以查看下面的文章: