在角度分量中使用'require'

时间:2016-02-09 13:45:33

标签: javascript angularjs angular-directive

根据the docs(特别是将指令与组件进行比较的表),角度组件允许需要其他指令(或者只是组件?)。但是,组件没有链接功能,可以访问所需的控制器。与文档相反,The source似乎表明在创建组件时不可能使用'require'。这是真的吗?

1 个答案:

答案 0 :(得分:18)

引用来源已过时。从1.5.0开始,组件控制器can be required在其他组件中(同样适用于指令)。

1.5中指南shows the way how the components and directives should interact的示例,没有link的帮助。

require object and bindToController一起使用时,所需的控制器实例将作为属性分配给当前控制器。

因为这在指令链接期间发生,所以控制器构造函数中不能使用所需的控制器,这就是$onInit magic method存在的原因。如果存在,it is executed right after adding required controllersthis

两个

app.directive('someDirective', function () {
  return {
    scope: {},
    bindToController: {},
    controllerAs: 'someDirective',
    require: {
      anotherDirective: '^anotherDirective'
    },
    controller: function ($scope) {
      console.log("You don't see me", this.anotherDirective);

      this.$onInit = function () {
        console.log("Now you do", this.anotherDirective);
      };
    }
  }
});

app.component('someComponent', {
  controllerAs: 'someComponent',
  require: {
    anotherDirective: '^anotherDirective'
  },
  controller: function ($scope) {
    console.log("You don't see me", this.anotherDirective);

    this.$onInit = function () {
      console.log("Now you do", this.anotherDirective);
    };
  }
});

声明样式在引擎盖下是可以接受的,可以在1.5中互换使用,component是简洁的。