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

How do I initialize a nested controller in AngularJS?

本文关键字:初始化 嵌套 控制器 AngularJS      更新时间:2023-09-26

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

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

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

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

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

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

有没有其他方法可以从控制器初始化中的中继器获取活动项目?

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

据我了解,您希望将详细信息变量传递到嵌套范围内,并且您不想担心记住变量名称,以防您必须在另一个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 ">

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