为什么在 init 和 didUpdateAttrs 分配 属性 是不同的?
Why assigning a property at init and didUpdateAttrs are different?
在Ember.js Guide,有一个这样的例子:
import Ember from 'ember';
export default Ember.Component.extend({
init() {
this._super(...arguments);
this.errors = [];
},
didUpdateAttrs() {
this._super(...arguments);
this.set('errors', []);
},
...
});
为什么分配给 errors
属性 在 init
和
didUpdateAttrs
?它们有什么区别?
已更新 根据@locks 回答:
何时设置可观察性?初始化后?但是父组件的值在初始化之前已经赋给了子组件的属性。
这必须主要与可观察性有关。
在 init
上,尚未设置可观察性,因此 this.errors = []
和 this.set('errors', [])
在功能上相似。
如果您在 didUpdateAttrs
生命周期挂钩中执行 this.errors = []
,相关的计算属性和模板将不会更新。这是因为您当前需要 get
/set
才能符合 KVO。
在Ember.js Guide,有一个这样的例子:
import Ember from 'ember';
export default Ember.Component.extend({
init() {
this._super(...arguments);
this.errors = [];
},
didUpdateAttrs() {
this._super(...arguments);
this.set('errors', []);
},
...
});
为什么分配给 errors
属性 在 init
和
didUpdateAttrs
?它们有什么区别?
已更新 根据@locks 回答:
何时设置可观察性?初始化后?但是父组件的值在初始化之前已经赋给了子组件的属性。
这必须主要与可观察性有关。
在 init
上,尚未设置可观察性,因此 this.errors = []
和 this.set('errors', [])
在功能上相似。
如果您在 didUpdateAttrs
生命周期挂钩中执行 this.errors = []
,相关的计算属性和模板将不会更新。这是因为您当前需要 get
/set
才能符合 KVO。