Angularjs 角度-选择字段在通过$http接收值时不更新

Angularjs 角度-选择字段在通过$http接收值时不更新,angularjs,data-binding,Angularjs,Data Binding,我有两个选择字段,一个用于月,一个用于日控制器,名称为“contactDetails”: <select data-ng-model="contactDetails.contactBasicInfo.bdmonth" data-ng-options="bdMonth.key as bdMonth.value for bdMonth in contactDetails.months"> <option value="">Month</option>

我有两个选择字段,一个用于月,一个用于日控制器,名称为“contactDetails”:

<select
  data-ng-model="contactDetails.contactBasicInfo.bdmonth"
  data-ng-options="bdMonth.key as bdMonth.value for bdMonth in contactDetails.months">
  <option value="">Month</option>
</select>
<select
  data-ng-model="contactDetails.contactBasicInfo.bdday"
  data-ng-options="bdDay.key as bdDay.value for bdDay in contactDetails.days">
  <option value="">Day</option>
</select>
然后我调用一个函数,为这两个变量赋值:

ctrl.contactBasicInfo = data.contactInfo.contactBasicInfo;
data.contactInfo.contactBasicInfo中的所有其他数据都有效,字段也会更新,如名字、电话、电子邮件等。如果我将模型放入html中,如{{ctrl.contactBasicInfo.bdmonth},它将显示正确的值。因此,我知道$http调用返回的值是正确的。选择不会改变以反映新值

你知道我遗漏了什么吗


谢谢

这是因为元素的指令ngModel在绑定时使用===比较。因此,0='0'将返回false。因此,您应该为附加到下拉列表的ngModel分配一个字符串,而不是数字/整数。

在这种情况下,是否会使用track by help?@JanR我认为我们谈论的不是同一件事。生成select的数组永远不会更改,只有选定的值会更改。@Lex我不确定track by在这里有什么帮助。如果我在代码中写入新值以替换默认值0,则select不会更新。因此,双向绑定似乎工作正常。我只是不知道为什么它没有从$http返回中检测到新的值。那么,除了数字之外,我在每个月的哪一天使用什么值呢?正如我所说的,如果我将默认的bdmonth值从=0改为=3,那么select将改为三月。但是如果http返回并将值设置为3,则它什么也不做。所以值的数字是有用的,对吗?或者你是说我只需要在数字周围加引号?对$http call.Gotcha返回的整数使用javascript toString函数。我要试一试。谢谢,还是不工作。我将ctrl.contactBasicInfo.bdmonth=data.contactInfo.contactBasicInfo.bdmonth.toString设置为ctrl.contactBasicInfo.bdmonth;仍然不会更改选择。但如果我这样做:ctrl.contactBasicInfo.bdmonth=3;选择更改。这是数字3,不是字符串3。但是,这不起作用:ctrl.contactBasicInfo.bdmonth='3';所以我不认为数字是字符串的问题。至少看起来不是。啊,好吧。我懂了。我还需要将构建select值的数字更改为字符串3'而不是3。谢谢
ctrl.contactBasicInfo = data.contactInfo.contactBasicInfo;