包含AngularJS多选指令时出错

时间:2018-02-16 13:30:43

标签: javascript angularjs angular-chosen

我在实现AngularJS选择指令时遇到以下错误。

  

错误:       TypeError:a.map不是函数           at nh.q.writeValue(angularjslatest.js:307)           at Object.e。$ render(angularjslatest.js:328)           在angularjslatest.js:310           在angularjslatest.js:146           at m。$ digest(angularjslatest.js:147)           at m。$ apply(angularjslatest.js:150)           在l(angularjslatest.js:102)           在XMLHttpRequest.s.onload(angularjslatest.js:108)

我正在解释下面的代码:

<select chosen 
        multiple 
        class="form-control oditek-form" 
        name="category" 
        id="category" 
        ng-model="category" 
        ng-options="s.value as s.name for s in listOfCategory">
</select>

我的控制器代码如下所示。

$scope.listOfCategory = [{
  name: 'Select Category',
  value: ''
}];

$scope.category = $scope.listOfCategory[0];

var fileURL = '';
var url1 = '../service/admin/vechile/service/service.php?action=getAllCategoryData';
var method = 'GET';
var data1 = '';

DataService.connectToServerSideScript(method, url1, data1).then(function(response) {
  if (response.length > 0) {
    angular.forEach(response, function(obj) {
      var cdata = {
        'name': obj.category_name,
        'value': obj.id
      };
      $scope.listOfCategory.push(cdata);
    })
  }
}, function(error) {

});

这里我收到了所有数据,但这些错误正在浏览器控制台中出现。在这里,我需要清除这些错误。

2 个答案:

答案 0 :(得分:0)

您需要将所选模型设置为数组:

$scope.category = angular.isDefined($scope.listOfCategory[0]) ? 
                      [$scope.listOfCategory[0]] : [];

请注意,这也会修复以下错误消息:

  

错误:TypeError:a.forEach不是函数

答案 1 :(得分:0)

我遇到了同样的“选择多选”相关问题,这个问题的错误是3倍。错误日志如下所示。解决方案可以帮助其他人。

TypeError: a.map is not a function 
at mh.q.writeValue (angular.js:30513) 
at e.$render (angular.js:33327) 
at Object.c.$render (angular-chosen.min.js:7) 
at angular.js:29306 
at m.$digest (angular.js:18253) 
at b.$apply (angular.js:18531) 
at HTMLButtonElement. (angular.js:27346) 
at HTMLButtonElement.dispatch (jquery.min.js:3) 
at HTMLButtonElement.q.handle (jquery.min.js:3)

为了绕过这个问题,我保留了2个变量,一个用于模型变量,另一个用于保存变量。 e.g。

在控制器中,

$scope.x = {
   draftVar: []
};

$scope.save = function(){
   $scope.x.savingVar = $scope.x.draftVar.join(',');
   save();

}

<select ng-model="x.draftVar" chosen multiple chosen-updater ng-options="xx.id as xx.name for xx in XXs"> 
    <option value=""></option>
</select>