如何清除ng-repeat下的所有选中选项
这个问题的出现原因是ng-repeat导致了三个单独的选择框都试图使用相同的ng-model。解决方法是将ng-model改为数组,这样可以分别跟踪每个值;只需清空数组即可清除整个集合。
以下是修改后的示例代码:
var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.selectedCar = []; $scope.cars = [{ model: "Ford Mustang", color: "red" }, { model: "Fiat 500", color: "white" }, { model: "Volvo XC90", color: "black" } ]; $scope.cl = function() { $scope.selectedCar = [] } });
Select a car:
Choose a carYou selected: {{selectedCar}}
另外,如果你想对表单进行验证,可以通过遍历该数组并在找到空值时执行某些操作来实现。上述示例已经修改,以显示空值的简单消息;如果你需要更复杂的处理方式,最好发布一个新问题来讨论。
问题的原因是ng-repeat指令导致了选项的重复,而解决方法是通过设置$scope.selectedCar变量为空来清除所有选中的选项。
在这个例子中,ng-repeat指令被用来创建一个汽车选择列表。每一个汽车选择列表都有一个ng-model指令,用来将选中的汽车模型绑定到$scope.selectedCar数组中的对应索引位置上。
在点击按钮的时候,调用了一个名为cl的函数,这个函数通过将$scope.selectedCar变量设置为空对象来清除选中的选项。
然而,有一个改进的方法可以更好地解决这个问题,那就是移除ng-repeat指令。因为ng-repeat指令导致了选项的重复,而在这个例子中并不需要重复的选项。所以,通过将ng-repeat指令从select元素的外层div元素中移除,可以解决这个问题。
最终的解决方案是将$scope.cl函数修改为$scope.cl = function () {$scope.selectedCar = ""};
。这样就可以通过设置$scope.selectedCar为空来清除所有选中的选项,而不需要使用$broadcast或$on来广播事件。
需要注意的是,虽然最初的代码中使用了$broadcast和$on来广播和监听事件,但这两个操作实际上是不必要且无关紧要的。因为问题的根本在于ng-repeat指令导致了选项的重复,而不是事件的广播和监听。因此,在最终的解决方案中,没有使用$broadcast和$on。