我有一个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>