Почему этот синтаксис для функции ссылки внутри директивы неверен?

Я потратил много времени, чтобы выяснить, почему не работает моя функция директивной ссылки:

В коде директивы вы можете написать эту строку для контроллера:

 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-

Другие вопросы по тегам