angularjs – 有没有办法阻止在ng-if中评估模板的条件?

前端之家收集整理的这篇文章主要介绍了angularjs – 有没有办法阻止在ng-if中评估模板的条件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ng-repeat,它像一个switch条件,告诉我要渲染哪个模板.我在ng-repeat中使用ng-if来实现这一点.问题?它仍在评估ng-if中的模板,即使条件的计算结果为false,也会导致整个事情变慢.

<div ng-repeat="i in ...">
  <div ng-if="i == 'something1'">
    if this is false,do not evaluate this entire stuff
    .... some complex template goes here
  </div>
  <div ng-if="i == 'something2'">
    if this is false,do not evaluate this entire stuff
    .... another complex template goes here
  </div>
</div>

如果每个ng-if内的模板很复杂,并且有20 ng-if在ng-repeat内,只有一个ng-if评估为true,则其他19个模板将浪费计算资源.

如果不采用编程方法并为呈现的模板维护双向绑定,我可以做些什么来缓解这种情况?

解决方法

ng-if如果条件为false则从HTML中删除项目,因此一些渲染&在此之前可能会进行评估.如果将ng-include嵌套在ng-if中,则不会评估通过ng-include加载的模板.

像这样的东西:

<body ng-app="app">
    <div ng-controller="myController as ctrl">
        <div ng-if=true>
            Hi
            <div>{{ctrl.log(true)}}</div>
        </div>
        <div ng-if=false>
            Bye
            <ng-include src="foo.html"></ng-include>
            <div>{{ctrl.log(false)}}</div>
        </div>

    </div>
    <script>
        angular.module('app',[]).controller("myController",myController);

        function  myController($scope){
            var ctrl = this;

            ctrl.log=function(val) {    
                console.log(val);
                return val;
            }
        };
    </script>
</body>

猜你在找的Angularjs相关文章