0

所以我的问题和这个几乎一样: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" } ]

所以我应该选择欣斯代尔市……但不,它在第一行(空行)。

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

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

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

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

  • 可以保存
  • 当我们到达页面时,可以检索良好的价值
  • NOT OK :当我们在列表中选择时看不到该值。

为了保存,mongo 只需要 ville 属性中的 id。但要显示我需要名称属性...

就像我在绕圈跑...

4

1 回答 1

4

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

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

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

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

另请参阅这个简短的演示


更新:

如果您确定其中的每个项目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的 s 是唯一的。)

另请参阅另一个简短的演示

于 2014-05-23T05:23:27.583 回答