如何在AngularJS中初始化嵌套控制器?

时间:2015-01-22 08:58:21

标签: javascript angularjs controller angularjs-ng-repeat

假设我们有一个AngularJS视图,其中包含一个主细节关系。 例如订单和订单详情。

我们假设使用ng-repeat而不是order.details来呈现细节。 例如

<div ng-repeat="detail in orderCtl.order.details" 
     ng-controller="detailController as detailCtl">

我知道我可以在$scope.detail初始化时获取detailController

 /* initcontroller */ 
 function($scope) {
      console.log($scope.detail); //<-- this is the active item
 }

但是,这感觉就像一个黑客,因为我需要在控制器中知道ng-repeat变量名称是什么,在这种情况下detail

还有其他方法可以从控制器初始化器中获取转发器中的活动项吗?

如果有人将ng-repeat变量名称从detail更改为其他名称,则控制器将不再按预期工作。

1 个答案:

答案 0 :(得分:3)

据我所知,您希望将详细信息变量传递到嵌套范围,如果您必须在另一个ng-repeat中使用嵌套控制器,您不想担心记住变量名称吗?

你可以很容易地做到

<div ng-repeat="detail in orderCtl.order.details" 
 ng-controller="detailController as detailCtl" ng-init="myVarname= detail">

<div ng-repeat="historydetails in orderCtl.historyorder.details" 
 ng-controller="detailController as detailCtl" ng-init="myVarname= historydetails ">

并记得在detailController中使用myVarname。 当然这并不完美,因为你必须记住detailController需要myVarname才能工作。