预选的ng-select值问题

时间:2015-07-13 12:58:11

标签: javascript angularjs mongodb select

我正在尝试获得一个预选值,我尝试了多个教程并在这里寻找答案但没有效果。 这是交易 - >
我用$ http.get(“api / shifting”)加载我的班次,然后:

 <select multiple class="form-control" ng-options="shift as shift.nom for shift in shifts" ng-model="selectedShift"></select>

它进入了一个模态窗口。但是在这个模态窗口打开之前,我可以预先选择一个班次(看看谁能够做到)。在这种情况下,我有

 if(preselectedShift){
  $http.get("api/shifts/"+preselectedShift._id).success(function(shift){
    $scope.selectedShift = shift; //so it's replacing the ng-model in <select>
  })
}

所有的转变都应该出现,但没有预先选择的转变。我也试过一个循环。

for (shifts.length) -> if(shift[i]._id == preselectedShift._id) ->$scope.selectedShift = shift[i]

这给了我一个错误“value.forEach不是函数”

Nor ng-select =“shift._id == preselectedShift._id”有效(给出相同的错误)。

提前谢谢!

2 个答案:

答案 0 :(得分:3)

问题在于select标签中的“multiple”。多个意味着我可以选择多个选项,因此传递的对象是一个数组。 所以我不得不初始化$ scope.selectedShift = []然后,正如Matthew建议的那样$ scope.selectedShift.push($ scope.shifts [x])

答案 1 :(得分:2)

我认为你与你的解决方案非常接近,只是因为forEach本身不受支持,如果你使用for循环,那么它应该是好的:

$scope.selectedShift = [];
if(preselectedShift){
    $scope.selectedShift.length = 0;
    $http.get("api/shifts/"+preselectedShift._id).success(function(shift){
        for(var x = 0; x < $scope.shifts.length; x++){
            if($scope.shifts[x]['_id'] === shift['_id']){
                $scope.selectedShift.push($scope.shifts[x]);
            }
        }
    })
}   

你必须这样做的原因是因为在ng-options中你使用shift as shift.nom ...这意味着为了选择它,它实际上必须是来自数组的相同引用,而不仅仅是等于它的东西。这是一个快速的例子(希望)解释角度检查是如何选择的:

var myTest = { test: 4};
var myArray = [{ test: 4 }];
var myTest2 = myArray[0];

console.log(myArray[0] === myTest); //this outputs false
console.log(myArray[0] === myTest2); //this outputs true