通过 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 初始化并为您准备好了。

Plunker Demo