Порядок AngularJS директивы создаются не так, как я понимаю из документации

У меня есть приложение AngularJS, где я должен пройти через некоторые элементы с помощью клавиш курсора. Для этого я создал директиву selectable, которая добавляет некоторую информацию в список в сервисе при создании директивы.

Важно, чтобы это происходило в том порядке, в котором выбираемые директивы появляются в представлении.

Из моего исследования:

Директивная компиляция пошаговая и др.

Я думал, что это будет работать, потому что предварительная ссылка и контроллеры будут созданы в порядке. Но это не всегда происходит.

Вот мой HTML:

<selectable ng-repeat="suggestion in pCtrl.suggestions" value="suggestion">
  {{suggestion}}
</selectable>
<div ng-repeat="cat in pCtrl.categories">
  <selectable ng-repeat="item in cat" value="item">
    {{item}}
  </selectable>
</div>
<selectable ng-if="true" value="pCtrl.bottom">
  <div>
    Bot content
  </div>
</selectable>

И вот директива:

app.directive('selectable', function() {
  return {
    restrict: 'E',
    replace: true,
    scope: {},
    controller: 'SelectableCtrl',
    controllerAs: 'selCtrl',
    bindToController: {
      value: '='
    }
  };
})
.controller('SelectableCtrl', [
  function() {
    var self = this;
    console.log(this.value);
  }
]);

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

Я сделал вантуз, чтобы продемонстрировать, что происходит. Пожалуйста, проверьте журнал консоли плунжера.

Plunker: проверка порядка создания директив

1 ответ

Решение

В угловом порядке компиляции JS вложенных директив, основанных на приоритете, чем глубже вложенный элемент, тем позже он компилируется.

В вашем коде выбираемые для категорий вложены в div div ng-repeat="cat in pCtrl.categories"

сначала компилируются директивы selectable, присутствующие во внешнем теге div, а затем компилируются оставшиеся директивы selectable, присутствующие во внутреннем теге div. Отсюда вывод консоли, показывающий порядок согласно его компиляции.

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