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