Aurelia 绑定:属性-getter 重复调用
Aurelia binding: property-getter called repeatedly
我目前正在学习和使用 Aurelia,并且发生了一些奇怪的(也许是正常的)事情。
使用以下代码时
export class NavBar {
get username() {
console.log('o_o')
return 'name' + Date.now()
}
}
并且在模板 ${username}
中,用户名始终在更新,每秒更新几次(当然 console.log 也会被记录多次)。
解决方法是简单地使用函数而不是 getter 并在模板中调用 ${username()}
。但这种行为正常吗?那么我应该有时使用 getter 有时不使用吗?
谢谢!
这很正常,Aurelia 会轮询您的 属性 进行更改,因为它无法知道您的 属性-getter 何时会 return 一个不同的值。
如果它是一个简单的属性(没有getter),Aurelia 可以直接观察属性,不需要轮询。
为了避免轮询,您可以告诉 Aurelia 的绑定系统要观察什么:
import {computedFrom} from 'aurelia-framework';
export class Foo {
_username = 'hello';
@computedFrom('_username')
get username() {
return this._username;
}
}
另一种选择是使用一次性绑定:
${username & oneTime}
我目前正在学习和使用 Aurelia,并且发生了一些奇怪的(也许是正常的)事情。
使用以下代码时
export class NavBar {
get username() {
console.log('o_o')
return 'name' + Date.now()
}
}
并且在模板 ${username}
中,用户名始终在更新,每秒更新几次(当然 console.log 也会被记录多次)。
解决方法是简单地使用函数而不是 getter 并在模板中调用 ${username()}
。但这种行为正常吗?那么我应该有时使用 getter 有时不使用吗?
谢谢!
这很正常,Aurelia 会轮询您的 属性 进行更改,因为它无法知道您的 属性-getter 何时会 return 一个不同的值。
如果它是一个简单的属性(没有getter),Aurelia 可以直接观察属性,不需要轮询。
为了避免轮询,您可以告诉 Aurelia 的绑定系统要观察什么:
import {computedFrom} from 'aurelia-framework';
export class Foo {
_username = 'hello';
@computedFrom('_username')
get username() {
return this._username;
}
}
另一种选择是使用一次性绑定:
${username & oneTime}