2

我有以下代码:-

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
</head>
<body ng-app="app" ng-controller="ctrl" ng-init="init()">
  <div class="container" style="width:400px">
    <div class="panel panel-default">
      <div class="panel-body">
        <form>
            <div class="form-group">
              <label for="selectedBasket">Select basket :</label>
              <select id="selectedBasket" class="form-control" ng-model="selectedBasket" ng-options="b.name for b in baskets">
              </select>
            </div>
            <div ng-repeat="f in fruits" class="checkbox">
              <label>
                <input type="checkbox" value="" ng-checked="selectedBasket !== null && selectedBasket.items.indexOf(f) !== -1">
                  {{ f }}
              </label>
            </div>
        </form>     
      </div>
    </div>
  </div>

  <script>
  var app = angular.module('app', []);
  app.controller('ctrl', function($scope) {
    $scope.init = function() {
      $scope.baskets = [{'name': 'mary', 'items': ['apple', 'orange']}, {'name': 'jane', 'items': ['banana']}];
      $scope.fruits = ['apple', 'banana', 'cherry', 'orange', 'watermelon'];
      $scope.selectedBasket = null;
    };
  });
  </script>
</body>
</html>

如果我选择 Mary 或 Jane,我可以正确地看到他们购物篮中的正确项目被选中。但是,如果我手动检查所有水果,然后查看 Mary 或 Jane,它不会排除不在篮子中的项目。为什么 ng-checked 失败?

额外的问题,将 selectedBasket 设置为 null 并在指令中检查 null 是否是最佳做法,假设我不需要任何默认值,有没有更好的方法?

4

2 回答 2

1

您的复选框中没有 ng-model ,因此您的手动操作不会在任何地方注册。
ng-checked 仅用于制作“从属”复选框,它不能采取任何手动操作。我的猜测是您应该使用初始化为您的 ng-check 值的 ng-model 而不是使用 ng-checked。

如果你想保持你的 ng-checked 你可以做的是:

<input type="checkbox" ng-click="selectedBasket.items.push(f)" ng-checked="selectedBasket !== null && selectedBasket.items.indexOf(f) !== -1">

其实还是错了……一定累了,在你的ng-click中使用toogle功能,添加或删除项目应该会更好……

于 2015-08-19T13:12:34.797 回答
0

ng-check 有同样的问题,尝试了所有方法,但没有任何效果。我想控制点击时检查项目的数量为 2,所以我使用了 ng-click 发送的 $Event 并将其禁用。

这是一个示例代码:

 <input type="checkbox" ng-click="toggleCheck($event, product._id);"
  ng-checked="isChecked(product._id)">

   $scope.toggleCheck($event, productId){
        if ( $scope.featuredProducts.indexOf(productId) === -1) {
            if ($scope.featuredProducts.length < 2) {
                $scope.featuredProducts.push(productId);
            }else {
                $event.preventDefault();
                $event.stopPropagation();
            }
        } else {
             $scope.featuredProducts.splice( $scope.featuredProducts.indexOf(productId), 1);
        }
    }

    $scope.isChecked(productId){
        return ($scope.featuredProducts.indexOf(productId) !== -1);
    }
于 2017-02-12T07:53:32.017 回答