angular和select - 设置默认值

时间:2015-07-09 19:15:43

标签: angularjs

我正在努力尝试从控制器中的值设置选择框的默认值。

我的控制器

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}]

但是,对于已经设置了值的情况

,这是不对的

感谢

5 个答案:

答案 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通过引用监视模型,而不是值

http://codepen.io/ces/pen/jPxBZz

答案 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.itemcontroller.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});

Plunker here

答案 4 :(得分:-1)

您需要将selected属性添加到option

中相应的select元素
相关问题