Angularjs 嵌套角重复性能
我有一个奇怪的ng重复问题与性能有关(或者至少我认为它与ng重复有关)。我有一个永远不会超过10个左右的项目列表,但是不管有多少个项目(即使只有一个项目),这个问题都会发生 当页面第一次加载时,它的速度非常快。我甚至可以在列表中添加/更新项目,但它仍然几乎是在瞬间发生的。但一旦我尝试删除一个项目,它需要>4秒。让我展示一段代码Angularjs 嵌套角重复性能,angularjs,performance,angularjs-ng-repeat,ng-repeat,Angularjs,Performance,Angularjs Ng Repeat,Ng Repeat,我有一个奇怪的ng重复问题与性能有关(或者至少我认为它与ng重复有关)。我有一个永远不会超过10个左右的项目列表,但是不管有多少个项目(即使只有一个项目),这个问题都会发生 当页面第一次加载时,它的速度非常快。我甚至可以在列表中添加/更新项目,但它仍然几乎是在瞬间发生的。但一旦我尝试删除一个项目,它需要>4秒。让我展示一段代码 removeItem(itemId) { this.ordersService.removeItem( this.order.order_id, it
removeItem(itemId) {
this.ordersService.removeItem(
this.order.order_id,
itemId
).then(
(item) => {
let index = _.findIndex(this.items, {
item_id: itemId
});
this.items.splice(index, 1);
console.log('item removed');
this.$timeout(function() {
console.log('$timeout fired');
});
}, (response) => {
this.message = response.data.message;
}
);
}
模板
:
<li ng-click="OrderCtrl.removeItem(item.item_id)"
ng-repeat="item in OrderCtrl.items track by item.item_id">
<div class="row-wrapper">
<span class="field">{{ item.item_number }}
</span><span class="field">{{ item.model_number }}
</span><span class="field">{{ item.model_title }}</span>
</div>
</li>
{{item.item_number}
{{item.model_number}
{{item.model_title}
这显然不是在它的当前状态下运行的,但我想你明白了。单击该行时,它调用OrderCtrl
上的removietem
方法。控制器从服务发出一个Ajax请求,该请求在大约80ms内完成。“item removed”和“$timeout fired”几乎同时显示在我的控制台中。但是,实际从列表中移除渲染元素大约需要4秒钟
这里有什么值得我做的事吗?我快没主意了。是由于
this.items.splice
以某种奇怪的方式影响了手表还是其他什么原因?是否需要翻译列表或其他任何可能改变列表中值的内容?如果没有,也许您可以在ng repeat(item in::OrderCtrl.items track by item.item_id)中对其他项使用一次性绑定,这可能是一个需要显式调用$scope的问题。$apply在承诺的“then”函数中?@ChasBrown这主意不错。我自己也想到了这一点,但在摘要已经运行的地方出现了错误。@alphapilgrim实际的应用程序要比这个复杂得多。我去掉了一堆东西,只是为了排除造成延迟的其他原因。但实际上还有其他操作可以更改型号、单个项目等。由于您尝试了.apply并出现错误,因此可能值得尝试.digest或$applyAsync([exp]);