Использование 'require' в угловом компоненте

Согласно документам (в частности, таблице, сравнивающей директивы с компонентами), угловые компоненты позволяют требовать других директив (или это только компоненты?). Однако компоненты не имеют функции связи, которая могла бы предоставить доступ к необходимому контроллеру. Источник, вопреки документации, кажется, предполагает, что невозможно использовать 'require' при создании компонентов. Что является правдой?

1 ответ

Решение

Приведенный источник устарел. Начиная с 1.5.0, компонентные контроллеры могут потребоваться в других компонентах (то же самое относится и к директивам).

Пример из руководства показывает, как компоненты и директивы должны взаимодействовать в 1.5 без помощи link,

когда require объект и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 является кратким.

Другие вопросы по тегам