我在页面上有大约5个绑定,看起来类似于:
<select ng-options="d as (d.display || d.name) for d in products"
ng-model="customer.products" class="ib ng-pristine ng-valid">
<option value="?" selected="selected"></option>
...
</select>
(我对选项/模型进行了一些保护,以保护IP,但这非常接近)
问题是五个中的一个没有选择与其模型相对应的选项。当我使用以下方法将ng-model与正确的选项进行比较时:
JSON.stringify(s.products[9]) ==
JSON.stringify(s.customer.products) // s is the scope for the select
我得到true
。选项列表和模型中的对象是等效的,但绑定没有发生,因此它们不够等效。
ng-options声明对我来说是正确的。我想挖掘角度代码,并在绑定发生时找出A!= B的原因。哪里是?我找到了var selectDirective = ['$compile', '$parse', function($compile, $parse) {
(第17523行角度1.2.0)代码,这个代码很接近,但似乎不是潜在选择值与当前选定值之间的连接发生的地方。
当选择选项和模型“连接”时,角度代码的哪一部分被使用?
答案 0 :(得分:1)
我相信this line设置了初始选择的选项:
selected = modelValue === valueFn(scope, locals);
我认为您还错误地设置了“未选中”选项,根据documentation:
可选地,单个硬编码元素,设置值 到一个空字符串,可以嵌套到元素中。这个 然后,element将表示null或“not selected”选项。
您可以仅查看here上的选择指令的来源。
除此之外,如果没有看到说明问题的傻瓜或小提琴,很难给出任何其他输入。