首页 > 解决方案 > Aurelia 使可绑定行为在对象属性上可观察

问题描述

在 Aurelia 绑定中,如果在组件中我们对属性使用可观察的装饰,并且如果该属性是一个对象,那么我们将订阅该对象的所有属性。

例如:

  import { observable } from 'aurelia-framework';

  export class Car {
    @observable color = {rgb: '', hex: ''};

    colorChanged(newValue, oldValue) {
      // this will fire whenever the 'color' property changes
    }
  }

因此,如果其中一个颜色属性发生变化,那么它将触发 colorChanged。但是在自定义元素中,我们有这样的可绑定对象:

  import {bindable, bindingMode} from 'aurelia-framework';

  export class SecretMessageCustomElement {
    @bindable data;

    dataChanged () {
       // -------
    }
  }

那么 dataChanged 将不会在其属性更改时被调用。如何解决?

标签: observableaureliabindable

解决方案


@observable 不观察属性

这是一个示例:https ://gist.run/?id=040775f06aba5e955afd362ee60863aa

@observable color = { rgb: '', hex: '' }

colorChanged(val) { }

colorChanged当 rgb 或 hex 改变时不会改变,只有当整个颜色属性被重新分配时。


推荐阅读