使用Controller1
与Controller2
之间有区别吗?
angular.module('app', [])
.component('foo', {
templateUrl: 'foo.html',
bindings: {
user: '<',
},
controller: Controller1, //Or Controller2
});
function Controller1(){
this.$onInit = function(){
this.user = angular.copy(this.user);
};
this.$onChanges = function(changes){
if(changes.user && !changes.user.isFirstChange()){
this.user = angular.copy(changes.user.currentValue);
}
};
}
function Controller2(){
this.$onChanges = function(changes){
if(changes.user){
this.user = angular.copy(changes.user.currentValue);
}
};
}
当我在$onInit
中执行相同的操作并保存一些行时,为什么要烦扰$onChanges
?
这种类型的初始化在$onChanges
和$onInit
更好地用于其他类型的初始化吗?
答案 0 :(得分:0)
<强> $的OnInit 强>
在构造了元素上的所有控制器并初始化其绑定之后(在此元素上的指令的前置和后置链接函数之前),在每个控制器上调用。这是为控制器放置初始化代码的好地方。
<强> $ onChanges 强>
出于几个原因调用$ onChanges生命周期钩子。第一个是在组件初始化时,它在运行时传递初始更改Object,因此我们可以立即获取数据。只有在&#39;&lt; (单向数据绑定)和&#39; @&#39; (对于已评估的DOM属性值),从父组件绑定。调用$onChanges
后,您将获得一个可以挂钩的特殊更改对象,我们将在后续章节中进行探讨。
主要的实际差异是$onInit
仅在指令初始化时调用,但$onChanges
将在初始化期间以及<
和@
变量发生变化时调用。