由于性能方面的原因,我们在页面上有多个列表,可能有数百个项目,我们希望对事物使用一次性绑定,只有当我们知道需要更新时才会更新并显着减少观察者数量。Angular中的任何方式都可以重新呈现或重新编译使用一次绑定的页面或整个页面的一部分?
如果我们不使用一次性的绑定,有没有办法迫使角到页面的重新渲染部分甚至整个页面?
由于性能方面的原因,我们在页面上有多个列表,可能有数百个项目,我们希望对事物使用一次性绑定,只有当我们知道需要更新时才会更新并显着减少观察者数量。Angular中的任何方式都可以重新呈现或重新编译使用一次绑定的页面或整个页面的一部分?
如果我们不使用一次性的绑定,有没有办法迫使角到页面的重新渲染部分甚至整个页面?
所以我做了一些研究,似乎并没有一个原生的方式来做到这一点。我发现这个可能的代码,以帮助可以工作,但是当我尝试它,我使用一些自定义的第三方指示有问题,但它可能对谁想做简单的事情其他人的工作:
https://gist.github.com/kentcdodds/739566ebd3609ac95e61
我发现的唯一功能似乎是做我正在寻找的是ng-if,如果我们知道它是否从真到假,然后回到真,它将在设置为false时删除元素和所有角/范围,然后重新编译和重新添加时设置为true(是的,包括重新绑定一次绑定!)。
我一直在努力解决这个问题,并且会回顾它的情况,但最初的测试确实看起来很有希望。对这种方法的任何想法或意见也是受欢迎的。
UPDATE
所以我还是设法得到这个工作。 基本上你把它想重新编译和重新绑定并添加NG-如果用某种元素的“复位”变量,像这样:
<div id="dashboard-view" ng-if="reset">
... Some more code that includes one time bindings i.e. {{::store.name}}...
</div>
在你的控制器:
angular.module('sampleApp')
.controller('SampleCtrl',['$scope', function($scope){
$scope.reset = true;
$scope.dataUpdated = function(){
$scope.store.name = "new name";
$scope.reset = false;
$timeout(function(){$scope.reset=true;},50);
};
});
凡dataUpdate可以是任何事件处理程序导致要更新的数据(例如,用于一个新的对象或更新现有的对象形式的形式)的按钮可以是
<input type="submit" ng-click=dataUpdated>
我不确定超时是否是最好的方式。当我尝试只做$ scope.reset = false; $ scope.reset = true;它没有工作。也许可以尝试在它们之间注入一个$ scope。$ apply()。如果有人对此有任何意见,请让我知道。
但是这个作品等一切都将被recomplied(也重新呈现),如果这些值被更改与仪表板#视图DIV中一次性绑定任何将rebinded。
如果任何人有一个更好的解决办法或这样随意回答为好方式。我希望这有助于别人,我花了一段时间才想出这种方法。
UPDATE 2 因此,我对ng-if的源代码进行了一些研究,并且在角度上存在更高级的概念,因此如果任何人对更纯粹的非hacky方式感兴趣,好的地方开始。