Angluar2可观察的UI-更新对象数组中的子级强制更改? [英] Angluar2 Observable UI - Update Children in Object Array force Change?

查看:100
本文介绍了Angluar2可观察的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
        },
    ]
};

然后,我将在加载时显示在UI中,如下所示:

        <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.我希望它随后可以更新/重新运行我的UI. /p>

我确定可以使用可观察对象来完成此操作,但是我缺少这样做吗?

解决方案

如果您未在某个事件(按钮单击,值更改)或异步调用中修改对象,则必须告知Angular您希望该组件为刷新.

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

不需要使用Observables,但是如果这样做了,则可能会使用async管道来显示消息.管道调用ChangeDetectorRef本身.

确保模型更改反映在UI中的另一种方法是使用不可变的对象(只要您想修改现有对象,就创建一个新的对象副本),但这也会增加一些复杂性.

Angular的变更检测系统是一个值得更详细了解的主题.您可以查看以下文章:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆