通知子组件有关 Angular2 的更改
Notify child component about changes in Angular2
假设我有简单的 Angular2 组件
@Component({ selector: 'parent' })
@View({
template: `
<p>Parent {{ data }}</p>
<child [model]="data"></child>
`,
directives : [Child]
})
export class Parent {
data: number = 42;
}
如您所见,它使用了另一个简单的组件
@Component({
selector: 'child',
properties : ['model']
})
@View({
template: `
<p>Child {{ model }}</p>
`,
})
export class Child {
model: number;
}
我通过 angular 的 [property]
数据绑定语法将 model
从 parent
组件传递到 child
。因此,如果我想跟踪 parent
中 model
的一些变化,我可以轻松地将事件添加到 child
并通过 (event)
语法跟踪 [=29] 中的变化=].那么当 parent
改变 model
并且 child
想要被通知时,我该如何实现相反的情况呢?
您可以使用getters and setters来管理它。对于您的示例 Child
组件必须如下所示:
@Component({
selector: 'child',
properties : ['model']
})
@View({
template: `
<p>Child {{ model }}</p>
`,
})
class Child {
_model: number;
set model(newModelValue) {
// Here we are
console.log('new model value: ' + newModelValue)
this._model = newModelValue;
}
get model() {
return this._model;
}
}
这是您的案例plunker
您可以将额外的逻辑或计算放入 onChange 方法中,该方法在更新所有组件的绑定属性后调用。
@Component({
selector: 'child',
properties : ['model']
})
@View({
template: `
<p>Child {{ model }}</p>
`,
})
class Child {
model: number;
onChange(map){
if(map.model) {
console.log('doing crazy stuff here');
console.log(map.model); //SimpleChange {previousValue: 43, currentValue: 44}
}
}
}
假设我有简单的 Angular2 组件
@Component({ selector: 'parent' })
@View({
template: `
<p>Parent {{ data }}</p>
<child [model]="data"></child>
`,
directives : [Child]
})
export class Parent {
data: number = 42;
}
如您所见,它使用了另一个简单的组件
@Component({
selector: 'child',
properties : ['model']
})
@View({
template: `
<p>Child {{ model }}</p>
`,
})
export class Child {
model: number;
}
我通过 angular 的 [property]
数据绑定语法将 model
从 parent
组件传递到 child
。因此,如果我想跟踪 parent
中 model
的一些变化,我可以轻松地将事件添加到 child
并通过 (event)
语法跟踪 [=29] 中的变化=].那么当 parent
改变 model
并且 child
想要被通知时,我该如何实现相反的情况呢?
您可以使用getters and setters来管理它。对于您的示例 Child
组件必须如下所示:
@Component({
selector: 'child',
properties : ['model']
})
@View({
template: `
<p>Child {{ model }}</p>
`,
})
class Child {
_model: number;
set model(newModelValue) {
// Here we are
console.log('new model value: ' + newModelValue)
this._model = newModelValue;
}
get model() {
return this._model;
}
}
这是您的案例plunker
您可以将额外的逻辑或计算放入 onChange 方法中,该方法在更新所有组件的绑定属性后调用。
@Component({
selector: 'child',
properties : ['model']
})
@View({
template: `
<p>Child {{ model }}</p>
`,
})
class Child {
model: number;
onChange(map){
if(map.model) {
console.log('doing crazy stuff here');
console.log(map.model); //SimpleChange {previousValue: 43, currentValue: 44}
}
}
}