由於性能方面的原因,我們在頁面上有多個列表,可能有數百個項目,我們希望對事物使用一次性綁定,只有當我們知道需要更新時纔會更新並顯着減少觀察者數量。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方式感興趣,好的地方開始。