通过 AngularJS 中的指令将控制器的值传递给另一个控制器
Passing value of a controller to another controller through its directive in AngularJS
我有一个模板,它在其中使用了另一个类似这样的指令:
<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);
}
}
第一个控制台语句 returns null,而第二个 returns 4 符合预期。
我可以看到 myOriginalController.currentObject 的值,它是一个对象,如果我将它放在我的第一个模板中的某处,则使用它:
{{ myOriginalController.currentObject }}
但是,当我尝试将它传递给我的其他指令时,该值并未显示在其他指令的控制器中。知道我在这里遗漏了什么吗?
bindToController
的文档提到可以在控制器方法内通过名称 $onInit
(Angular 提供的生命周期挂钩之一)访问绑定。此方法在元素上的所有控制器都已构建且绑定已全部初始化后调用。
鉴于此,只需将您的 constructor
方法替换为 $onInit
,您应该已经 currentObj
初始化并为您准备好了。
我有一个模板,它在其中使用了另一个类似这样的指令:
<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);
}
}
第一个控制台语句 returns null,而第二个 returns 4 符合预期。
我可以看到 myOriginalController.currentObject 的值,它是一个对象,如果我将它放在我的第一个模板中的某处,则使用它:
{{ myOriginalController.currentObject }}
但是,当我尝试将它传递给我的其他指令时,该值并未显示在其他指令的控制器中。知道我在这里遗漏了什么吗?
bindToController
的文档提到可以在控制器方法内通过名称 $onInit
(Angular 提供的生命周期挂钩之一)访问绑定。此方法在元素上的所有控制器都已构建且绑定已全部初始化后调用。
鉴于此,只需将您的 constructor
方法替换为 $onInit
,您应该已经 currentObj
初始化并为您准备好了。