Подтвердить что ты не робот

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

В соответствии с docs (в частности, таблица сравнения директив с компонентами), компоненты angular разрешают использовать другие директивы (или это только компоненты?). Однако компоненты не имеют функции связи, что может обеспечить доступ к требуемому контроллеру. Источник, в отличие от документации, кажется, предполагает, что при создании компонентов невозможно использовать "require". Что верно?

4b9b3361

Ответ 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 - краткой.