ng-options选择默认值

时间:2014-05-15 23:20:59

标签: javascript html5 node.js angularjs ng-options

所以我的问题几乎与这个问题相同:how to use ng-option to set default value of select element

我无法获得被选中的好价值。我还尝试了许多使用ng-init等的解决方案......

但我无法弄清楚如何解决它。

我有这个型号:

var CarSchema = new Schema({
[... some stuff ...]
ville: {
    type: Schema.ObjectId,
    ref: 'City'
}
});

var CitySchema = new Schema({
 name: {
    type: String
}
});

我的HTML代码:

<select ng-model="car.ville" ng-options="city.name for city in cities"><option value=""/></select>
            HERE 1: {{ car.ville | json }}
            <BR>
            HERE 2 : {{cities | json}}

结果我得到了:

HERE 1: { "_id": "536fee62cadf4efc08000001", "name": "Hinsdale" } 

HERE 2 : [ { "_id": "53703935cadf4ef008000000", "name": "Noumea" }, { "_id": "536fee62cadf4efc08000001", "name": "Hinsdale" }, { "_id": "536fee3ccadf4ef808000000", "name": "Bascom" } ]

所以我应该选择Hinsdale城市......但不,它位于第一行(空行)。

我做错了什么?我尝试了很多配置,但它仍然无法正常工作

添加小提琴示例:jsfiddle.net/pL44W/5

所以我几乎可以使用这个小提琴:

http://jsfiddle.net/Tyvain/UuVYL/

  • 确定保存
  • 确定我们到达页面时检索到的好价值
  • 不行:我们在列表中选择时看不到值。

要保存,mongo只需要ville属性中的id。但要显示我需要name属性......

就像我在圈子里跑...

1 个答案:

答案 0 :(得分:4)

您希望car.ville绑定到城市对象,但您的ngOptions“表示”该模型应绑定到城市名称

如果要在下拉列表中显示城市名称,但将模型(car.ville)与城市对象相关联,请将其更改为:

ng-options="city as city.name for city in cities"

此外,为了使ngOptions能够识别模型值,它需要引用数组中的项(而不仅仅是具有相同属性的不同对象,因为相等性检查是通过引用而不是通过引用来完成的值)。

另请参阅此 short demo


<强>更新

如果您确定cities中的每个项目都有唯一的_id,那么根据track by功能(在v1.2中引入)有一个更简单的替代方案:

ng-options="city as city.name for city in cities track by city._id"

现在,ngOptions可以将列表中的对象与模型值相关联,但不一定是引用,而是基于_id属性。 (即_id“相同ngOptions”就_id而言意味着“相同的对象”,因此请确保您的{{1}}是唯一的。)

另请参阅此 other short demo