Ответ 1
После некоторого копания вокруг исходного кода это то, что я нашел: Это способ объявить отдельный атрибут для динамического назначения контроллера директиве. См. plunker.
Идея состоит в том, чтобы создать ссылку на контроллер в другом атрибуте, чем имя директивы. Если свойство name не указано, в качестве атрибута будет использоваться имя директивы.
var app = angular.module('angularjs-starter', []);
app.directive('myDirective', [ function() {
return {
name : 'myController',
controller : '@',
restrict : 'A',
link : function(scope, elm, attr) {
console.log('myDirective.link');
}
};
} ]);
app.directive('myDirective2', [ function() {
return {
controller : '@',
restrict : 'A',
link : function(scope, elm, attr) {
console.log('myDirective2.link');
}
};
} ]);
app.controller('MyDirectiveController', [ '$scope', function($scope) {
console.log('MyDirectiveController.init');
} ]);
app.controller('MyDirectiveController2', [ '$scope', function($scope) {
console.log('MyDirectiveController2.init');
} ]);
app.controller('MyDirective2Controller', [ '$scope', function($scope) {
console.log('MyDirective2Controller.init');
} ]);
Шаблон:
<h1 my-directive my-controller="MyDirectiveController">My Directive Controller</h1>
<h1 my-directive my-controller="MyDirectiveController2">My Directive Controller 2</h1>
<h1 my-directive2="MyDirective2Controller">My Directive 2 Controller</h1>
Вывод:
MyDirectiveController.init
myDirective.link
MyDirectiveController2.init
myDirective.link
MyDirective2Controller.init
myDirective2.link