【问题标题】:Angular - Select fields don't update when value received via $httpAngular - 当通过 $http 接收到值时,选择字段不会更新
【发布时间】:2016-03-21 00:42:33
【问题描述】:

我有两个选择字段,一个用于月,一个用于日(控制器名称为“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>

输出选择就好了,我可以使用它们将信息保存到数据库中。那里没有问题。 问题是当我从数据库中提取信息并希望更新选择字段以反映从数据库中提取的值时。他们没有。如果我将值硬编码到控制器中,它们会更新,但如果值是在 $http 调用之后分配的,则不会更新。

我在控制器顶部有这个来设置默认值:

ctrl.contactBasicInfo.bdmonth = 0;
ctrl.contactBasicInfo.bdday = 0;

稍后我调用一个函数,然后将值分配给这两个变量:

ctrl.contactBasicInfo = data.contactInfo.contactBasicInfo;

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

任何想法我缺少什么?

谢谢!

【问题讨论】:

  • 在这种情况下会使用track by 帮助吗?
  • @JanR 我不认为我们在谈论同一件事。构建选择的数组永远不会改变,只有选定的值会改变。
  • @Lex 我不知道track by 在这里会有什么帮助。如果我在代码中写入新值以替换默认值 0,则选择会更新。因此,双向绑定似乎工作正常。我只是不知道为什么它没有从 $http 返回中检测到新值。

标签: angularjs data-binding


【解决方案1】:

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

【讨论】:

  • 那么,除了数字之外,我还使用什么值来表示月份中的某天?正如我所说,如果我将默认 bdmonth 值的 =0 更改为 =3,则选择将更改为 March。但如果 http 返回并将值设置为 3,它什么也不做。所以值的数字确实有效,对吧?还是说我只需要在数字周围加上引号?
  • 对 $http 调用返回的整数使用 javascript toString() 函数。
  • 明白了。我会试一试。谢谢。
  • 还是不行。我设置了ctrl.contactBasicInfo.bdmonth = data.contactInfo.contactBasicInfoBD.bdmonth.toString(); 仍然没有改变选择。但如果我这样做:ctrl.contactBasicInfo.bdmonth = 3; 选择更改。那是数字 3 而不是字符串 3。但是,这不起作用:ctrl.contactBasicInfo.bdmonth = '3'; 所以我认为数字不是字符串的问题。至少看起来不是。
  • 啊,好吧。我懂了。我还需要将构建选择值的数字更改为字符串。 '3' 而不是 3。谢谢!
猜你喜欢
  • 2016-04-02
  • 2021-06-10
  • 2019-02-13
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多