为什么ngif忽略优先级?

时间:2017-03-23 10:30:06

标签: javascript angularjs angularjs-directive ngif

我创建了一个优先级为1000的自定义指令。在指令的编译函数中,我将从元素中删除ng-if。我的假设是,由于ng-if的优先级较低,因此不应该编译。

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

以下是plunker链接:

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

1 个答案:

答案 0 :(得分:2)

我不确定为什么优先级不会这样。我建议使用终端来消除低优先级指令。此处已更新Plunker

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

另请参阅有关terminal的这些问题: