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-checked を使用する代わりに、ng-check 値に初期化された ng-model を使用する必要があります。

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 に答える