如何从AngularJS中的父控制器按ID选择选项

时间:2014-05-20 16:00:40

标签: javascript angularjs angularjs-ng-options

摘要

更新子控制器作用域中select元素的简洁方法是什么,以便所选项的ID与父作用域中的ID匹配?

详细

我有两个控制器:

  • OrderController
  • CustomerController

OrderController加载订单并在订单上显示。

CustomerControllerOrderController表单中子表单的范围。它显示所有客户的列表,默认客户是与订单关联的客户。用户可以编辑所选客户的详细信息,也可以从子表单中添加客户。

可能的解决方案

到目前为止,我已经想过两个,但似乎都不是很好。

  1. 在传递给订单$resource的JSON中包含所有客户的列表。这不会起作用,因为用户需要一个完整的独立控制器来更新子窗体上的客户。
  2. 在CustomerController中加载客户时触发事件。 OrderController处理该事件,根据其select属性更新customer_id。这似乎更好但仍然很难。

2 个答案:

答案 0 :(得分:1)

要在两个控制器之间进行通信,您通常会广播/发出,例如:

(CoffeeScript的)

CustomerController:

Api.Customer.get(
  id: $scope.customer_id
).$promise.then (data) ->
  $scope.$emit 'event:updateOptionId', id

OrderController:

$scope.$on 'event:updateOptionId', (event, id) ->
  $scope.customer_id = id

我不知道您应用的结构,但这是根据客户控制器中的操作将新客户ID传递给订单控制器。如果你发布了一些代码,你可能会得到更全面的答案。

答案 1 :(得分:0)

我发现Angular会自动处理更新。问题是我的服务器正在返回订单数据的单项数组。所以订单属性的customer_id没有进入$scope.order.customer_id;它进入了$scope.order[0].customer_id。纠正后端解决了这个问题。