Angularjs HTML选择输入在使用ui路由器在视图之间切换时丢失其值

Angularjs HTML选择输入在使用ui路由器在视图之间切换时丢失其值,angularjs,angular-ui-router,forms,Angularjs,Angular Ui Router,Forms,我有一个具有多个视图的控制器,这些视图通过ui路由器进行导航 其中一个视图具有select输入。此select的选项是从带有简单对象的数组中加载的。我的模型值是整数,所以我想绑定到对象内部的属性(正如我们所知,Angular将选项值视为字符串,并进行严格比较,因此我需要一个指令来转换为整数/从整数转换而来,这部分在我的代码中似乎工作得很好)。只要我使用select停留在视图上,它就可以正常工作。但是当我在视图之间切换时,问题就开始了。虽然模型保留其值,但选择会重置并显示错误的值 如何使选择在ui

我有一个具有多个视图的控制器,这些视图通过ui路由器进行导航

其中一个视图具有
select
输入。此
select
的选项是从带有简单对象的数组中加载的。我的模型值是整数,所以我想绑定到对象内部的属性(正如我们所知,Angular将
选项
值视为字符串,并进行严格比较,因此我需要一个指令来转换为整数/从整数转换而来,这部分在我的代码中似乎工作得很好)。只要我使用
select
停留在视图上,它就可以正常工作。但是当我在视图之间切换时,问题就开始了。虽然模型保留其值,但
选择
会重置并显示错误的值

如何使
选择
在ui路由器的导航中生存

下面是一个Plunker来说明问题:




@JustMartin每次导航回页时控制器初始化时。这意味着您应该将所选选项值保留在服务中。@Mohan Singh:我的案例有点不标准-我没有为状态指定控制器。My ng controller位于外部-两个视图的控制器实例相同-甚至其构造函数也只调用一次,在导航时也不会调用。如果控制器将被重新初始化,那么模型值也将丢失,但它不是-它将保持不变,并在我在视图之间切换时正确显示。只有
select
值显示错误。为什么不取消选项?@Mohan Singh,因为我尽了最大努力,它正在将整个选定对象加载到我的模型中,而不仅仅是
id
属性。但看起来,我不够聪明——请看公认的答案。@JustMartin每次导航到后页时控制器都会初始化。这意味着您应该将所选选项值保留在服务中。@Mohan Singh:我的案例有点不标准-我没有为状态指定控制器。My ng controller位于外部-两个视图的控制器实例相同-甚至其构造函数也只调用一次,在导航时也不会调用。如果控制器将被重新初始化,那么模型值也将丢失,但它不是-它将保持不变,并在我在视图之间切换时正确显示。只有
select
值显示错误。为什么不取消选项?@Mohan Singh,因为我尽了最大努力,它正在将整个选定对象加载到我的模型中,而不仅仅是
id
属性。但是,我似乎不够聪明——请看公认的答案。谢谢,这很有效。多么巧妙地使用了
ng选项
,我从来没有想到过这样的把戏。事实上,有一天我自己在stack overflow的某个问题中找到了它,但找不到它的原始答案。很抱歉,积分不是100%来自Mether我只发现了一个缺点-只要“id”字段与
idx
的顺序相同,它就可以正常工作,但如果不是,然后我仍然无法直接绑定到model.lang_id,但必须使用一些中间模型值,然后通过索引从
语言中选择正确的记录。多么巧妙地使用了
ng选项
,我从来没有想到过这样的把戏。事实上,有一天我自己在stack overflow的某个问题中找到了它,但找不到它的原始答案。很抱歉,积分不是100%来自Mether。我只发现了一个缺点-只要“id”字段与
idx
的顺序相同,它就可以正常工作,但如果它们不是,那么我仍然无法直接绑定到model.lang\u id,但必须使用一些中间模型值,然后通过索引从
语言中选择正确的记录。
<select ng-model="cntrlr.model.lang_id" ng-options="idx*1 as var.name for (idx, var) in cntrlr.languages">
        </select>