我正在努力尝试从控制器中的值设置选择框的默认值。
我的控制器
foo()
我的HTML是
foo.count
当我运行代码时,controller.item的正确值以
的形式显示{" name":" bar1"," value":1}
但是选择框的第一个条目显示为(bar0)
我在这里想念的是什么?我在网上看过,但我见过的所有例子都说你必须这样做
controller.item = {name: "bar1", value:1}
controller.items = [{name: "bar0", value:0},{name: "bar1", value:1}]
但是,对于已经设置了值的情况
,这是不对的感谢
答案 0 :(得分:1)
您的ngOptions
有点偏离,语法为value as text for item in array
- 因此请将值设置为item
<select ng-model="controller.item" ng-options="item as item.name for item in controller.items" >
</select>
默认情况下:
controller.items = [{name: "bar0", value:0},{name: "bar1", value:1}]
controller.item = controller.items[0];
答案 1 :(得分:1)
HTML:
<p>{{item}}</p>
<select ng-model="item" ng-options="item.name for item in items" >
</select>
控制器:
angular.module('app',[])
.controller('MainCtlr',function($scope){
var selected = 0;
$scope.items = [
{name: "bar0", value:0},
{name: "bar1", value:1}
];
$scope.item = $scope.items[selected];
});
在ng-options
指令中设置默认选项时,必须通过引用。您无法创建新对象。 documentation说:
默认情况下,ngModel通过引用监视模型,而不是值
答案 2 :(得分:1)
使用您的符号Angular正在尝试将item.name
与您的整个item
对象进行匹配。
item to match: {name: "bar1", value:1}
value to match againist: 'bar1'
'bar1' != {name: "bar1", value:1} // Nothing selected by default since no matching ocurrs
为了正确进行匹配,您应该尝试使用the complete ng-optons notation:
<select ng-model="controller.item" ng-options="item as item.name for item in controller.items"></select>
在这里,您将controller.item
定义为模型,并在ng-options中使用整个项目对象进行检查,但标记为 item.name
(因为您在ng-options声明中定义了它),因此您的选择会将对象 name 属性呈现为选项,而不是整个对象,但它会重新匹配整个对象
答案 3 :(得分:1)
此处的问题controller.item
与controller.items[1]
不同。
我确信有人可以扩展为什么这比我更好,但它与JavaScript中的对象比较有关。
Here是指向其他帖子的链接。
您要做的是在数组中找到您想要的对象并将其设置为controller.item。
app.controller('MainCtrl', function($scope) {
var controller = this;
var tempItem = {name: "bar1", value:1};
controller.items = [{name: "bar0", value:0},{name: "bar1", value:1}]
for(var i = 0; i < controller.items.length; i++){
if(controller.items[i].name == tempItem.name) {
controller.item = controller.items[i];
}
}
});
你可以用这样令人惊奇的图书馆underscore.js达到同样的效果。
controller.item = _.findWhere(controllerItems,{name: tempItem.name});
答案 4 :(得分:-1)
您需要将selected
属性添加到option
select
元素