在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


最佳方法是什么?为什么?

最佳答案

使用计算的属性:

import { computedFrom } from 'aurelia-framework';

export class MyClass {

  @computedFrom('propX', 'propY') //update this property whenever propX or propY change
  get myComputedProp() {
    //do your magic here!
    return this.propX + this.propY;
  }

}


用法:

<div>${myComputedProp}</div>


有关更多信息,请访问:http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-computed-properties/1

09-18 18:53