为什么在angularJS 1.3中,美元手表、承诺和ng选项的组合表现不同?
从angularJS 1.2升级到1.3后,我遇到了ng选项的问题。浏览器中不显示选定的值 我有一个HTML选择:为什么在angularJS 1.3中,美元手表、承诺和ng选项的组合表现不同?,angularjs,promise,watch,ng-options,Angularjs,Promise,Watch,Ng Options,从angularJS 1.2升级到1.3后,我遇到了ng选项的问题。浏览器中不显示选定的值 我有一个HTML选择: <select ng-model="selectedField" ng-options="field for field in fields"></select> 使用angularJS 1.2设置selectedField并加载字段(通过承诺)后,效果良好。 但是,对于angularJS 1.3,不会显示选定的值 通过使用“track by”选项更
<select ng-model="selectedField" ng-options="field for field in fields"></select>
使用angularJS 1.2设置selectedField并加载字段(通过承诺)后,效果良好。
但是,对于angularJS 1.3,不会显示选定的值
通过使用“track by”选项更改ng选项查询,使其再次在angularJS 1.3中工作
<select ng-model="selectedField" ng-options="field for field in fields track by field"></select>
这是我偶然发现的。在这种情况下,不需要“track by”,因为字段是字符串列表。selectedField也是一个字符串。因此,ng选项使用的默认比较应该有效
这行得通,但我不高兴。这毫无意义,我需要一个我理解的解决方案
我继续研究这个问题,发现使用$watch将数据加载到$scope.fields中是一种“有毒”组合
- 如果我直接从控制器调用promise,那么它在angularJS 1.3中运行良好
- 如果我绑定$watch中的值列表,那么它也可以正常工作
- 如果我同时使用($watch和promise),它就会崩溃
- 案例1:在1.3中,只有promise和ng选项可以正常工作
- 案例2:在1.3中,只有$watch和ng选项可以正常工作
- 案例3:$watch、promise和ng选项在1.3中不起作用
但是是什么(在angular 1.3中?)导致了这种情况?所有情况对我都有效,至少在你的Plunker中。@Blackhole note-不起作用意味着第一个下拉列表没有选择正确的默认值。我可以复制这个。不正确确实意味着第一个下拉列表没有显示所选的值。如果使用choose case 2.1或case 2.2,请确保case 1下面的行再次被注释掉。我注意到在DOM检查器中,在case 2.1中,有两个选项
selected=“selected”
,但在case 1和2.2中,只有一个选项是@Blackhole thx。在Firefox中确实没有问题。我自己查过了。但是IE和Chrome有麻烦。