Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 嵌套角重复性能_Angularjs_Performance_Angularjs Ng Repeat_Ng Repeat - Fatal编程技术网

Angularjs 嵌套角重复性能

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

我有一个奇怪的ng重复问题与性能有关(或者至少我认为它与ng重复有关)。我有一个永远不会超过10个左右的项目列表,但是不管有多少个项目(即使只有一个项目),这个问题都会发生

当页面第一次加载时,它的速度非常快。我甚至可以在列表中添加/更新项目,但它仍然几乎是在瞬间发生的。但一旦我尝试删除一个项目,它需要>4秒。让我展示一段代码

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]);