一尘不染

在角度分量中使用“要求”

angularjs

根据文档(具体来说,表格将指令与组件进行了比较),角度组件允许需要其他指令(还是仅组件?)。但是,组件没有链接功能,该功能可以访问所需的控制器。,违背了文件,似乎表明这是不可能创建组件时使用“需要”。哪个是真的?


阅读 199

收藏
2020-07-04

共1个答案

一尘不染

引用的来源已过时。从1.5.0版本开始,其他组件中可能需要组件控制器(指令同样适用)。

该指南中的一个示例显示了如何在不借助的帮助下,组件和指令在1.5中进行交互的方式link

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

因为这是在指令链接期间发生的,所以所需的控制器在控制器构造函数中不可用,这就是为什么存在$onInit魔术方法的原因。如果存在,则在将所需的控制器添加后立即执行this

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是一种简洁的样式。

2020-07-04