Javascript ng click中的$index在firefox中有效,而在chrome中无效

Javascript ng click中的$index在firefox中有效,而在chrome中无效,javascript,angularjs,google-chrome,firefox,angularjs-ng-repeat,Javascript,Angularjs,Google Chrome,Firefox,Angularjs Ng Repeat,我认为有以下几点 <tr ng-repeat="item in cart.getItems() track by $index" class="cart-item"> <td>{{item.title}}</td> <td>{{item.quantity}}</td> <td><price value="item.price"></td>

我认为有以下几点

 <tr ng-repeat="item in cart.getItems() track by $index" class="cart-item">
        <td>{{item.title}}</td>
        <td>{{item.quantity}}</td>
        <td><price value="item.price"></td>
        <td><button ng-click="remove(cart.getItems(), $index)">remove</button></td>
 </tr>

有趣的是,它在firefox 31.8.0中运行良好,但在Google Chrome 44.0.2403.89 beta版(64位)中运行不好,在该版本中,单击
删除
按钮不会删除项目。有什么问题吗?

可能需要一个
$scope.$apply()
就在您的
array.splice()
之后强制重新绑定

或者,与其在视图中两次调用
.getItems()
并将其传递回控制器,不如在控制器作用域中设置数组,并在视图和移除方法中引用它

因此,在控制器中:

$scope.remove = function(item){
    var index = $scope.cartItems.indexOf(item);
    $scope.cartItems.splice(index, 1);
}
scope.cartItems=cart.getItems()

那么你的观点是:

 <tr ng-repeat="item in cartItems track by $index" class="cart-item">
        <td>{{item.title}}</td>
        <td>{{item.quantity}}</td>
        <td><price value="item.price"></td>
        <td><button ng-click="remove($index)">remove</button></td>
 </tr>

然后将所有引用都很好地保持在角度范围内

首先,不要在ng repeat中使用方法。将数据分配给某些作用域模型,如
$scope.cartItems
,然后重复它

其次,在remove方法中,只传递当前项:

第三,在控制器中:

$scope.remove = function(item){
    var index = $scope.cartItems.indexOf(item);
    $scope.cartItems.splice(index, 1);
}

cart.getItems()
看起来像什么?显示控制台错误吗?
$scope.remove = function(item){
    var index = $scope.cartItems.indexOf(item);
    $scope.cartItems.splice(index, 1);
}