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