【问题标题】:ng-options with array of objects linking to an ng-init带有链接到 ng-init 的对象数组的 ng-options
【发布时间】:2023-12-25 14:51:01
【问题描述】:

我正在使用ng-options 创建一个选择,该选择循环遍历链接到ng-init 的对象数组。但是,问题是,它还必须通过ng-change 传递正确的变量。

现在下面的代码将使ng-init 工作并在加载时选择正确的选项。 However, when the options are selected it doesn't pass the id to the ng-change

<select name="baddress" ng-init="autoship.baddress_id = address.id || addresses[0]" 
ng-model="autoship.baddress_id" 
ng-change="setter('baddress', autoship, address.id)" 
ng-options="address as address.address + ' ' + address.address2 + ' ' + address.city + ', ' + address.state + ' ' + address.zipcode for address in addresses" ></select>

通过在ng-options 的开头添加.idaddressng-change 可以完美运行,但加载时选择下拉列表为空。

<select name="baddress" 
ng-init="autoship.baddress_id = address.id || addresses[0]" 
ng-model="autoship.baddress_id" 
ng-change="setter('baddress', autoship, address.id)" 
ng-options="address.id as address.address + ' ' + address.address2 + ' ' + address.city + ', ' + address.state + ' ' + address.zipcode for address in addresses" ></select>

【问题讨论】:

  • "linking to an ng-init" ...这不是ng-init 的用途(参见文档)。使用控制器来处理这样的业务逻辑

标签: javascript angularjs ng-options ng-init


【解决方案1】:

adresses[0] 将是这一行中的整个地址对象:

ng-init="autoship.baddress_id = address.id || addresses[0]" 

为了只保留id,我认为您应该将其更改为:

ng-init="autoship.baddress_id = address.id || addresses[0].id" 

【讨论】:

  • 这成功了!非常感谢,一旦允许,我会接受答案。
  • 这使得回退工作。这很棒,但现在我意识到第一部分根本没有用。我认为@charlietfl 的评论是正确的。
  • @lettman1 所以你可以在你的控制器中初始化这个变量:$scope.autoship.baddress_id = whatever;