Подтвердить что ты не робот

Какая разница между функциями "postLink" 2 в директиве?

Из документа угловых символов при определении директивы существует a postLink in compile, a postLink in link

myModule.directive('directiveName', function factory(injectables) {
  var directiveDefinitionObject = {
    priority: 0,
    template: '<div></div>',
    templateUrl: 'directive.html',
    replace: false,
    transclude: false,
    restrict: 'A',
    scope: false,
    compile: function compile(tElement, tAttrs, transclude) {
      return {
        pre: function preLink(scope, iElement, iAttrs, controller) { ... },
        post: function postLink(scope, iElement, iAttrs, controller) { ... }
      }
    },
    link: function postLink(scope, iElement, iAttrs) { ... }
  };
  return directiveDefinitionObject;
});

Какая разница между ними? Я замечаю, что postLink в link имеет аргумент меньше, чем тот, который находится в compile. И есть ли другая разница?

4b9b3361

Ответ 1

Они ничем не отличаются от того, что у вас есть, это просто psuedo-код из документации. Функция postLink является самой важной, поэтому существует множество способов объявить ее.

Вот пример Plunker в качестве примера...

... и вот какой-то код psuedo, показывающий разные объявления функции postLink:

app.directive('dir1', function () {
   return function(scope, elem, attr) {
       //this is the same
   };
});

app.directive('dir2', function () {
   return {
       link: function(scope, elem, attr) {
           //this is the same
       }
   };
});

app.directive('dir3', function () {
   return {
      compile: function compile(tElement, tAttrs, transclude) {
         return {
           post: function postLink(scope, elem, attrs) {
              //this is the same
           }
         }
      }
   };
});

... вам нужен только один.

Ответ 2

Существенное различие заключается в том, что в функции предварительной ссылки дочерние элементы еще не связаны. Но в функции пост-ссылки он имеет.

Это имеет значение для манипуляций с DOM. Поскольку процесс связывания может дополнительно управлять DOM, для директивы только безопасно управлять DOM, когда его дочерние элементы уже связаны, - и это справедливо только в функции post-link.