如何调试失败的角度选择(或任何其他类型)绑定?

时间:2014-01-02 18:48:30

标签: javascript angularjs

我在页面上有大约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)代码,这个代码很接近,但似乎不是潜在选择值与当前选定值之间的连接发生的地方。

当选择选项和模型“连接”时,角度代码的哪一部分被使用?

1 个答案:

答案 0 :(得分:1)

我相信this line设置了初始选择的选项:

selected = modelValue === valueFn(scope, locals);

我认为您还错误地设置了“未选中”选项,根据documentation

  

可选地,单个硬编码元素,设置值   到一个空字符串,可以嵌套到元素中。这个   然后,element将表示null或“not selected”选项。

您可以仅查看here上的选择指令的来源。

除此之外,如果没有看到说明问题的傻瓜或小提琴,很难给出任何其他输入。