Aurelia - 自定义元素 属性 绑定分辨率
Aurelia - Custom element property binding resolution
我创建了一个带有 @bindable
属性 的自定义元素。在元素的构造函数中,使用绑定 属性 的值设置另一个 属性。这是自定义元素的代码(文件名 custom-element.ts
):
import {bindable} from 'aurelia-framework';
export class CustomElement{
@bindable value: any = null;
message: any;
constructor(){
this.message = this.generateMessage();
}
generateMessage(){
if (this.value != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
}
此模型有一个简单的相关视图(文件名custom-element.html
):
<template>
The value id is: ${value.id}, and the message is: ${message}
</template>
我在别处的视图中使用此元素,其模型可以访问 value
对象:
<require from="resources/custom-element"></require>
<custom-element value.bind="value"></custom-element>
虽然 ${value.id}
正确显示,但 ${message}
始终是 Something went wrong
。
什么时候设置value
,如何使用它的值设置message
?
最初创建自定义元素时会调用构造函数,但数据绑定将在其生命周期的后期发生。
为了访问绑定属性,您需要使用 bind
lifecycle callback(或 attached
,具体取决于您的实际需要)来设置您的 message
:
export class CustomElement{
@bindable value: any = null;
message: any;
bind() {
this.message = this.generateMessage();
}
generateMessage(){
if (this.value != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
}
作为替代解决方案,您可以订阅 value
属性 changed 事件,并使用命名约定实现一个方法:yourPropertyChanged
(因此在您的情况下 valueChanged
) 并在那里生成消息:
valueChanged(newValue) {
this.message = this.generateMessage(newValue);
}
generateMessage(newValue){
if (newValue != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
我创建了一个带有 @bindable
属性 的自定义元素。在元素的构造函数中,使用绑定 属性 的值设置另一个 属性。这是自定义元素的代码(文件名 custom-element.ts
):
import {bindable} from 'aurelia-framework';
export class CustomElement{
@bindable value: any = null;
message: any;
constructor(){
this.message = this.generateMessage();
}
generateMessage(){
if (this.value != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
}
此模型有一个简单的相关视图(文件名custom-element.html
):
<template>
The value id is: ${value.id}, and the message is: ${message}
</template>
我在别处的视图中使用此元素,其模型可以访问 value
对象:
<require from="resources/custom-element"></require>
<custom-element value.bind="value"></custom-element>
虽然 ${value.id}
正确显示,但 ${message}
始终是 Something went wrong
。
什么时候设置value
,如何使用它的值设置message
?
最初创建自定义元素时会调用构造函数,但数据绑定将在其生命周期的后期发生。
为了访问绑定属性,您需要使用 bind
lifecycle callback(或 attached
,具体取决于您的实际需要)来设置您的 message
:
export class CustomElement{
@bindable value: any = null;
message: any;
bind() {
this.message = this.generateMessage();
}
generateMessage(){
if (this.value != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}
}
作为替代解决方案,您可以订阅 value
属性 changed 事件,并使用命名约定实现一个方法:yourPropertyChanged
(因此在您的情况下 valueChanged
) 并在那里生成消息:
valueChanged(newValue) {
this.message = this.generateMessage(newValue);
}
generateMessage(newValue){
if (newValue != null){
// logic to generate and return message
} else {
return "Someting went wrong";
}
}