Почему этот синтаксис для функции ссылки внутри директивы неверен?
Я потратил много времени, чтобы выяснить, почему не работает моя функция директивной ссылки:
В коде директивы вы можете написать эту строку для контроллера:
controller: ['$scope', '$element', function($scope, $element) {
}],
Но вы не можете написать то же самое для ссылки, например:
link: ['scope', 'element', 'attrs', function(scope, element, attrs) {}]
Только это будет работать:
link: function(scope, element, attrs) {}
Это почему?
1 ответ
Решение
Поскольку контроллер является инъекционной функцией, а ссылка - нет. Это традиционная функция, в которой важен порядок аргументов, а не их имя. Он принимает, чтобы
- объем директивы,
- элемент директивы
- атрибуты этого элемента
- контроллер
- функция включения
Это задокументировано: https://docs.angularjs.org/api/ng/service/$ compile # -link-