Почему ngif игнорирует уровень приоритета?

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

app.js

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {

});
app.directive('myDirective', function(){
  return {
    priority: 1000,
    compile: function(element){
      angular.element(element).removeAttr('ng-if').removeAttr('my-directive1');
    }
  };
});
app.directive('myDirective1', function(){
  return {
    compile: function(){
      console.log('in mydirective1');
    }
  };
});

index.html

<div my-directive ng-if="false" my-directive1>
  This div should be visible.
</div>

Я создал еще одну директиву, чтобы проверить правильность моего понимания приоритета. myDirective успешно удаляет myDirective1, но не ngIf.

Ниже приведена ссылка на плунжер:

https://plnkr.co/edit/86mauwbt5I2aV4aoySpz?p=preview


person Vaibhav    schedule 23.03.2017    source источник


Ответы (1)


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

app.directive('myDirective', function(){
  return {
    priority: 1000,
    terminal: true,
    compile: function(element){
      //element.removeAttr('ng-if').removeAttr('my-directive1');
    }
  };
});

Также см. эти вопросы о terminal:

person Kursad Gulseven    schedule 23.03.2017
comment
Спасибо за ответ. - person Vaibhav; 23.03.2017