如何清除ng-repeat下的所有选中选项

15 浏览
0 Comments

如何清除ng-repeat下的所有选中选项

由于ng-repeat的存在,上面的代码中每个选择框都有自己的作用域,因此当我尝试清除所有选定的选项时无法实现。

有什么建议吗?

0
0 Comments

这个问题的出现原因是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 car

You selected: {{selectedCar}}

另外,如果你想对表单进行验证,可以通过遍历该数组并在找到空值时执行某些操作来实现。上述示例已经修改,以显示空值的简单消息;如果你需要更复杂的处理方式,最好发布一个新问题来讨论。

0
0 Comments

问题的原因是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。

0