考慮下面這個簡單的模塊和控制器:我可以阻止AngularJS完全重建DOM的重複部分嗎?
var t = angular.module("test", []);
t.controller("TestCtrl", function ($scope, $timeout) {
$scope.arr = [
"elem1",
"elem2",
"elem3"
];
$scope.getDate = function() {
return +new Date();
};
$timeout(function() {
$scope.arr[2] = "< I should have a different timestamp to the two above me now";
}, 2000);
});
而下面這個簡單的模板:
<ul ng-app="test" ng-controller="TestCtrl">
<li ng-repeat="x in arr">{{getDate()}} {{arr[$index]}}</li>
</ul>
有沒有一種方法,我可以讓ng-repeat
指令只更新DOM中的必要元素,而比在模型的arr
屬性中的單個值更改時重新構建整個li
元素集?
我希望能夠呈現該列表,以便在超時後修改第3個元素時,前2個元素的時間戳不會更改。
這裏是a fiddle包含上面的例子。
編輯:請注意,此示例中的時間戳僅用於演示此問題。由於Angular每次都會重新創建DOM節點的數量,因此我的真實代碼要複雜得多,並且會遇到性能問題。在這種情況下,將時間戳添加到模型不是解決方案。
也許你可以把時間戳記保存在你的'arr'中? – akonsu
@akonsu - 時間戳只是爲了證明這個問題。由於Angular每次都會重新創建DOM節點的數量,因此我的真實代碼要複雜得多,並且會遇到性能問題。 –
我現在明白了。鑑於angularjs沒有這種優化,我看到的唯一方法是將您的數據分割成幾部分。與服務器上的數據分片相同的想法。 – akonsu