通过AngularJS中的指令将控制器的值传递给另一个控制器

时间:2017-05-19 01:36:01

标签: angularjs controller parameter-passing directive

我有一个模板,里面使用了另一个类似于此的指令:

<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 }}

但是,当我尝试将其传递给我的其他指令时,该值不会显示在其他指令的控制器中。知道我在这里失踪的是什么吗?

1 个答案:

答案 0 :(得分:1)

bindToController的文档提到绑定可以在控制器方法中通过名称$onInit(Angular提供的生命周期钩子之一)访问。在构造了元素上的所有控制器并且绑定都已初始化之后调用此方法。

有鉴于此,只需将constructor方法替换为$onInit,您就应该初步化currentObj并为您做好准备。

Plunker Demo