我有一个模板,里面使用了另一个类似于此的指令:
<my-directive current-obj="myOriginalController.currentObject" data="4"></my-directive>
这是我的指令的定义方式:
function myDirective() {
return {
restrict: 'E',
scope: true,
bindToController: {
currentObj: '=?',
data: '=?'
},
controller: MyController,
controllerAs: 'myController'
};
}
这就是我的控制器的定义方式:
export default class MyController {
constructor() {
console.log(this.currentObj);
console.log(this.data);
}
}
第一个控制台语句返回null,而第二个控制台语句按预期返回4.
我可以看到myOriginalController.currentObject的值,它是一个对象,如果我将它放在我的第一个模板中的某个位置:
{{ myOriginalController.currentObject }}
但是,当我尝试将其传递给我的其他指令时,该值不会显示在其他指令的控制器中。知道我在这里失踪的是什么吗?
答案 0 :(得分:1)
bindToController
的文档提到绑定可以在控制器方法中通过名称$onInit
(Angular提供的生命周期钩子之一)访问。在构造了元素上的所有控制器并且绑定都已初始化之后调用此方法。
有鉴于此,只需将constructor
方法替换为$onInit
,您就应该初步化currentObj
并为您做好准备。