【问题标题】:Angularjs ng-click not firing in ng-repeatAngularjs ng-click没有在ng-repeat中触发
【发布时间】:2018-02-28 00:18:02
【问题描述】:

我在 ng-repeat 中有 <li>list 并且此列表每秒更新一次。在列表中,我几乎没有带有 ng-click 指令的字段和操作按钮。因此,当列表<li> 中的数据更新时,每一秒都会再次渲染列表,此时 ng-click 没有触发,可能是因为在这个特定的小时刻,单击未绑定到按钮。

这是一小段代码。

<ul class="items-list">
    <li ng-repeat="item in items | orderBy: ['id', 'date']">
        <div>{{ item.id }}</div>
        <div>{{ item.size }}</div>
        <div>{{ item.date }}</div>
        <div ng-click="deleteEntry($event)"><img src="delete.png"></div>
    </li>
</ul>

控制器:

$scope.deleteEntry = function(event) {
    console.log("delete"); // sometimes this does not log
}

$interval(function() {
    $scope.items = someService.getItems();
}, 1000, 0, true);

数据正在正确更改,但在此渲染时间内没有触发点击。

【问题讨论】:

  • 奇怪的场景。如果列表每秒都在更新,用户应该如何单击此按钮。它会停止吗?
  • 它不会停止更新,并且按钮始终可见且可点击。
  • 如果您认为 $interval 会影响点击。你为什么不把间隔去掉,你就会知道那个问题的答案......
  • 但是我必须每秒刷新一次数据。

标签: angularjs angularjs-ng-repeat


【解决方案1】:

你想将一个对象传递给函数&lt;div ng-click="deleteEntry(item)"&gt;&lt;img src="delete.png"&gt;&lt;/div&gt;,这样你就可以对ng-repeat中的每个&lt;li&gt;标签执行任何操作

【讨论】:

    【解决方案2】:

    让下面的代码运行。

    $interval(function() {
      var getAllItems = someService.getItems();
      getAllItems.map(function(item){
          //check for the item that not present in $scope.items and push that item to $scope.items
          $scope.items.push(item);
      }); 
    }, 1000, 0, true);
    

    还有,

    ng-click="deleteEntry(item)"
    

    【讨论】:

    • interval回调可以为空。使用第三个参数 'true' $digest 将被调用,此时点击将失败。如果参数为“假”,点击将按预期工作,但 html 将不会更新,因为缺少 $digest。
    【解决方案3】:

    尝试使用 事件委托 使用 jquery 对每个元素进行删除调用。

    参考:https://www.bennadel.com/blog/2448-using-jquery-event-delegation-in-angularjs.htm

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2013-10-21
      • 2016-11-13
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多