http://jsfiddle.net/ADukg/16200/

json будет использовать в `ng-repeat.

[
  {
    "categoryId": 1,
    "categoryName": "Men",
    "subCategory": [
      {
        "subCategoryId": 1,
        "subCategoryName": "Footwear"
      },
      {
        "subCategoryId": 3,
        "subCategoryName": "Cloths"
      }
    ]
  },
  {
    "categoryId": 2,
    "categoryName": "Women",
    "subCategory": [
      {
        "subCategoryId": 2,
        "subCategoryName": "Footwear"
      }
    ]
  },
  {
    "categoryId": 3,
    "categoryName": "Kids",
    "subCategory": []
  }
]

Ниже кода есть дваng-repeat и показывая данные выше JSON.

<ul class="list-unstyled" ng-repeat="cat in catSubCat">
    <li>
        <label>
            <input type="checkbox" name="categories" id="category_{{cat.categoryId}}" ng-model="categoryChk" ng-change="categoryCheckBox(cat.categoryId, $index)" readonly><span class="gap">{{cat.categoryName}}</span>
        </label>
        <ul class="list-unstyled" ng-repeat="subCat in cat.subCategory">
            <li>
                <label>
                    <input type="checkbox" name="subcategories" id="sub_category_{{subCat.subCategoryId}}" ng-model="subCategoryChk" ng-change="subCategoryCheckBox(cat.categoryId, subCat.subCategoryId, $index)"><span class="gap">{{subCat.subCategoryName}}</span></label>
            </li>
        </ul>
    </li>
</ul>

В этом коде я пытаюсь утешить модели, чтобы проверить, установлен ли флажок или нет

$scope.subCategoryCheckBox = function(catId, subId, index) {
    console.log($scope.subCategoryChk);
}

$scope.categoryCheckBox = function(catId, index) {
    console.log($scope.categoryChk);
}

Я пытаюсь проверить, установлен ли флажок или нет$scope.subCategoryCheckBox() а также$scope.categoryCheckBox() печатая модель в консоли. Но это показываетundefined в консоли.

 Black Mamba22 нояб. 2017 г., 15:51

Ответы на вопрос(1)

Решение Вопроса

Сделать варыcategoryChk а такжеsubCategoryChk объекты (это тоже могут быть массивы), вот так:

$scope.categoryChk = {}; $scope.subCategoryChk = {};

Измените присвоение модели в HTML, чтобыматч с ранее созданнымобъекты, Для категорий, из этого:ng-model="categoryChk" к этому:ng-model="categoryChk[cat.categoryId]" ... и для подкатегорий, из этого:model="subCategoryChk" к этомуmodel="subCategoryChk[subCat.subCategoryId]".

Теперь в функциях вы можете получить доступ к модели через индекс, передаваемый в качестве аргумента:

$scope.subCategoryCheckBox = function(catId, subId, index) {
  console.log($scope.subCategoryChk[subId]);
}

$scope.categoryCheckBox = function(catId, index) {
  console.log($scope.categoryChk[catId]);
}

Смотрите рабочий фрагмент и объяснение ниже.

(function() {
  angular
    .module('app', [])
    .controller('ctrl', ctrl);

  function ctrl($scope) {

    $scope.catSubCat = [{
        "categoryId": 1,
        "categoryName": "Men",
        "subCategory": [{
            "subCategoryId": 1,
            "subCategoryName": "Footwear"
          },
          {
            "subCategoryId": 3,
            "subCategoryName": "Cloths"
          }
        ]
      },
      {
        "categoryId": 2,
        "categoryName": "Women",
        "subCategory": [{
          "subCategoryId": 2,
          "subCategoryName": "Footwear"
        }]
      },
      {
        "categoryId": 3,
        "categoryName": "Kids",
        "subCategory": []
      }
    ];
    
    $scope.categoryChk = {};
    $scope.subCategoryChk = {};

    $scope.subCategoryCheckBox = function(catId, subId, index) {
      console.log($scope.subCategoryChk[subId]);
    }

    $scope.categoryCheckBox = function(catId, index) {
      console.log($scope.categoryChk[catId]);
    }

  }

})();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app" ng-controller="ctrl">

  <ul class="list-unstyled" ng-repeat="cat in catSubCat">
    <li>
      <label>
            <input type="checkbox" name="categories" id="category_{{cat.categoryId}}" ng-model="categoryChk[cat.categoryId]" ng-change="categoryCheckBox(cat.categoryId, $index)" readonly><span class="gap">{{cat.categoryName}}</span>
        </label>
      <ul class="list-unstyled" ng-repeat="subCat in cat.subCategory">
        <li>
          <label>
                    <input type="checkbox" name="subcategories" id="sub_category_{{subCat.subCategoryId}}" ng-model="subCategoryChk[subCat.subCategoryId]" ng-change="subCategoryCheckBox(cat.categoryId, subCat.subCategoryId, $index)"><span class="gap">{{subCat.subCategoryName}}</span></label>
        </li>
      </ul>
    </li>
  </ul>

</div>

Дело в том, когда вы назначаетеcategoryChk а такжеsubCategoryChk вашей модели присваивает то же самоеng-model для всех категорий и подкатегорий соответственно. Это не так, как вы хотите, чтобы это работало, вам нужно назначить другую модель для каждой проверки (когда вы делаетеcategoryChk[cat.categoryId]Вы создаете на лету атрибут вcategoryChk для этой модели и так далее для каждой категории вng-repeatвот так ты хочешь чтобы это работало)

 lealceldeiro22 нояб. 2017 г., 15:58
Пожалуйста. Рад помочь!
 Sangram Badi22 нояб. 2017 г., 16:08
спасибо за помощь
 Sangram Badi22 нояб. 2017 г., 15:59
если вы нажмете на обувь, она проверит в двух разделах, вы можете сказать мне, как решить эту проблему
 Sangram Badi22 нояб. 2017 г., 15:54
спасибо за ваше объяснение
 lealceldeiro22 нояб. 2017 г., 16:07
Да. Изменить индекс $ наsubCat.subCategoryId а такжеcat.categoryId соответственно в представлении и в функциях не используйтеindexиспользуйте вместоsubId а такжеcatId соответственно. Смотрите мой ответ обновлен

Ваш ответ на вопрос