我正在尝试获得一个预选值,我尝试了多个教程并在这里寻找答案但没有效果。
这是交易 - >
我用$ 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”有效(给出相同的错误)。
提前谢谢!
答案 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