Использование '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
является кратким.