Функциональность угловой директивы перед цепочкой возврата и компиляции

Можно выполнить javascript в директиве перед возвратом чего-либо, а также на этапе компиляции директивы перед возвратом чего-либо:

    angular.module('foo').directive('fooDirective', [function(){
  console.debug('before return');
  return {
    restrict: 'E',
    controller: function($scope){
      console.debug('controller');
    },
    compile: function(scope, elem){
      console.debug('compile');
      return {
        pre: function(scope,elem, attr){
          console.debug('pre');
        },
        post: function(scope,elem,attr){
          console.debug('post');
        }
      }
    }
  }
}]);

  <body ng-app="foo">
    <foo-directive></foo-directive>
    <foo-directive></foo-directive>
  </body>

Это производит следующий порядок журнала консоли:

before return 
compile
compile 
controller
pre 
post 
controller 
pre 
post 

У меня есть несколько вопросов по этому поводу:

1) Зачем мне запускать код перед возвратом действительного объекта директивы? Каким будет сценарий использования?

2) Зачем мне запускать код перед возвратом функций ссылки до / после? Чем шаг предварительной ссылки отличается от шага компиляции? Что такое вариант использования?

3) Почему компиляция выполняется дважды подряд, когда есть два элемента, тогда как все остальное выполняется итеративно в том же порядке, независимо от количества элементов?

Plunk: http://plnkr.co/edit/1JPYLcPlMerXlwr0GnND?p=preview

1 ответ

Решение
  1. Вы хотели бы сделать это, чтобы иметь некоторые частные определения методов, которые может использовать только ваш объект.

  2. Вы могли бы сделать это, если бы вы использовали какую-то прекомпиляцию службы, чтобы получить данные для директивы, и после компиляции использовать данные и что-то с ними делать.

  3. Без понятия

  4. Я думаю, что происходит странное пузырение.

  5. потому что у вас есть только два экземпляра вашей директивы.

Вот что я вижу в журнале консоли:

before return 
compile 
compile
controller 
pre 
post 
controller 
pre 
post 
Другие вопросы по тегам