Property Observer vs自制的二传手

时间:2017-05-22 09:01:19

标签: javascript typescript aurelia

在aurelia视图模型中,我有一些属性需要在每次更改其他属性时更新。

据我所知,有两种不同的方法可以做到这一点。

方法1:propertyObserver

export class Foo {
    propX : number;
    bindingEngine : BindingEngine;

    bind() {
        this.bindingEngine.propertyObserver(this, 'propX')
            .subscribe((newV, oldV) => { this.updateOtherProperty() });
    }

    updateOtherProperty() {
        //...
    }
}

// usage
foo.propX = 5 // updateOtherProperty gets called

方法2:自制二手

export class Foo2 {
    propX : number;

    setPropX(value : number) {
        this.propX = value;
        this.updateOtherProperty();
    }

    updateOtherProperty() {
        //...
    }
}

// usage
foo.setPropX(5) // updateOtherProperty gets called

最好的方法是什么?为什么?

2 个答案:

答案 0 :(得分:1)

使用计算属性:

<div>${myComputedProp}</div>

用法:

@Component
@Service
@Controller
@Repository

有关详情,请访问:http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-computed-properties/1

答案 1 :(得分:1)

用于观察视图模型成员的紧凑Aurelia方法是使用可观察对象,它们的作用类似于可绑定对象。它相当于你的&#34;方法1&#34;但由于惯例不那么冗长,而且你不必跟踪任何剩余的Disposable

import {observable} from 'aurelia-framework';

export class Foo {
    @observable
    propX : number;

    propXChanged(newVal, oldVal) {
        //...
    }
}