嗨,我正在使用https://vitalets.github.io/checklist-model/将复选框中的数据绑定到模型。当用户选中一个复选框时,它将成功绑定数据。但是,我还需要一些选项来“全选”,我已经按照文档中的说明进行操作,并尝试映射数组中的所有值,因此当用户“全选”时,所有值都绑定到了模型中。而不是那种情况,我得到一个值为null的数组。这是流程的工作方式

1)init()函数称为在用户加载应用程序时返回数据

2)用户选择一个air_date

3)调用ng-options getSyscodes()后,用户获得系统代码数据返回

4)用户可以选择多个系统代码

5)用户可以“选择全部”,这就是我的问题所在,当我调用selectAll()时,而不是返回数组中的每个值,而是将数组返回为“ null”,并且我无法调用API。
我将不胜感激任何建议谢谢!
这是我的HTML

每个对象的数组结构

{syscode:1233,readable_name: "MTV"}

<form>
  <div class="form-group">
    <pre>Selected Model: {{rc.selections.syscode}} </pre>
    <label>Syscode</label>
    <!-- <select class="form-control" ng-options="syscode.readable_name for syscode in rc.dropdowns.syscodes" ng-model="rc.selections.syscode" ng-disabled="rc.dropdowns.syscodes.length === 0">
                                            </select> -->



  </div>
  <button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" style="width:214px;height:33px;font-size:15px;margin-left:-16px;"><i class="fa fa-caret-down pull-right" aria-hidden="true" style="width:1em;"></i></button>
  <ul class="dropdown-menu">
    <button class="btn btn-success btn-md" ng-click="rc.selectAll()"><i class="fa fa-check" aria-hidden="true"></i>Select All</button>
    <button class="btn btn-danger btn-md" ng-click="rc.unselectAll()"><i class="fa fa-times" aria-hidden="true"></i>Unselect All</button>

    <li ng-repeat="value in rc.dropdowns.syscodes">
      <input type="checkbox" checklist-model="rc.selections.syscode" checklist-value="value.syscode" ng-checked="rc.selections.checked" />&nbsp;{{value.readable_name}}</li>
  </ul>
</form>


和控制器

ReportsController.$inject = ['ReportService','$window', '$q'];
function ReportsController(ReportService, $window, $q){
  //Sorting Values
  var ctrl = this;

  //Initial State Values
  ctrl.results = [];
  ctrl.pageDone = false;
  ctrl.loading_results = false;
  ctrl.search_enabled = false;
  ctrl.searching = false;


  //Initial data arrays
  ctrl.dropdowns = {
    air_dates:[],
    syscodes:[],
    syscodeArray:[]
  };

  ctrl.test = null;
 //Data binding objects
  ctrl.selections = {
    air_date:null,
    checked: null,
    syscode:null,
    getAll: false
  };



  //Get Syscodes
  ctrl.selectSyscode = function(){
    ctrl.search_enabled = true;
    ctrl.dropdowns.syscodes = [];
    ctrl.dropdowns.syscodeArray = [];
    ReportService.getSyscodes(ctrl.selections).then(function(response){

      ctrl.dropdowns.syscodes = response.data;
      //This line below enables select all in UI
      ctrl.dropdowns.syscodeArray.push(response.data);
      console.log("SyscodeArray", ctrl.dropdowns.syscodeArray);
    });
  };

  // Select All Logic
ctrl.selectAll = function(){
var newitems = [];
angular.forEach(ctrl.dropdowns.syscodes, function(syscode) {
  ctrl.selections.checked = 1;
  newitems.push(syscode.syscode);
});

ctrl.selections.syscode = newitems;

}

  // Unselect All
  ctrl.unselectAll = function(){
    angular.forEach(ctrl.dropdowns.syscodeArray, function(user) {
      ctrl.selections.checked = 0;
    });
    ctrl.selections.syscode = [];
    }



  //Search Logic by Syscode and Air_Date
  ctrl.search = function () {
    var defer = $q.defer();
    if (ctrl.search_enabled) {
      ctrl.searching = true;
      ctrl.error = false;
      ctrl.sort_by = {
        col: 'market',
        reverse: true
      };
      ctrl.filters = undefined;

      ReportService.getAssets(ctrl.selections).then(function (response) {
        ctrl.results = response.data;
        console.log("It worked!!!",response.data);
        ctrl.searched_once = true;
        ctrl.searching = false;
        defer.resolve('searched');

      }, function (error) {
        defer.reject('search-error');
        ctrl.error = true;
        ctrl.searching = false;
        ctrl.error_data = error;
      });
    } else {
      defer.resolve('no-search');
    }

    return defer.promise;
  };



 //Calls initial air dates
  var init = function(){
    ReportService.getAirDates().then(function(response){
      ctrl.dropdowns.air_dates = response.data;
      console.log(response.data);
      ctrl.pageDone = true;
    });
  };
  init();
}


angular.module('command-center-app').controller('ReportsController', ReportsController);

最佳答案

我尝试了这个,我遍历了数组并制作了一个仅包含“ syscode”的新数组。我为该数组分配了模型ctrl.selections.syscode。这应该是正确的答案

ctrl.selectAll = function(){
var newitems = [];
angular.forEach(ctrl.dropdowns.syscodes, function(syscode) {
  ctrl.selections.checked = 1;
  newitems.push(syscode.syscode);
});

ctrl.selections.syscode = newitems;

}

09-17 05:43