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

В Angular: являются ли методы компиляции pre и post такими же, как ссылка pre и post

В функции компиляции директивы angular есть pre и post. Является ли это pre и post действительно такой же, как функция ссылки?

Например, в приведенном ниже коде функция ссылок такая же (ярлык, если вы это сделаете), как пред и пост функции компиляции под ней?

Ссылка

....
link: {
  pre: function(scope, elem, attr) {
   //stuff
  },
  post: function(scope, elem, attr) {
  //stuff
  }    
}
....

Compile...

  ....
  compile: function(tElem, tAttrs){
    return {
      pre: function(scope, iElem, iAttrs){
      //stuff
      },
      post: function(scope, iElem, iAttrs){
      //stuff
      }
    }
  }
  .....
4b9b3361

Ответ 1

Сначала выполняется компиляция (и обычно вы кладете свои элементы шаблона "template" ). Ссылка запускается во-вторых, и обычно вы прикрепляете свою директиву к $scope.

Они также выполняются в определенном порядке, поэтому вы можете использовать этот факт при разработке директив, для которых требуется некоторая "родительская" настройка директивы для правильной работы (например, tr: td sorta вещь).

Там действительно отличная статья о сроках компиляции по сравнению с ссылкой, на которую вы можете взглянуть, для большей ясности.

Кроме того, там есть ответ на аналогичный вопрос, который вам может понравиться (обратите внимание, что его НЕ тот, который был указан первым, это самый приоритетный).

Итак, какая разница?

Таким образом, компилируется pre/post link "то же самое", что и функция ссылки? Вы решаете.

Если вы определяете компиляцию в директиве, инфраструктура игнорирует вашу функцию ссылок (потому что функция компиляции должна возвращать функции pre/post link).

Это немного напоминает link перегрузки compile.postLink и link.pre перегрузки compile.preLink.

Ответ 2

Когда эта перегрузка происходит, знаете ли вы о чем-то другом (например, добавляется какая-либо другая функциональность), как предполагалось, чтобы просто вернуть pre и post из компиляции?

Если вы посмотрите исходный код, когда $directiveProvider регистрирует директивы, если свойство compile отсутствует и свойство link существует, оно создает свойство compile, которое является пустой функцией, которая возвращает свойство link.

Таким образом, ответ заключается в том, что функции ссылок, возвращаемые функцией компиляции, такие же, как функции связи, предоставляемые свойством link DDO. Никакая другая функциональность не добавлена.