【问题标题】:Angular 1.4 - get parent controller propertyAngular 1.4 - 获取父控制器属性
【发布时间】:2016-08-23 13:31:41
【问题描述】:

我有以下 HTML 结构:

<div class="order-table-page" ng-controller="SummaryController as summaryCtrl">
   <h3>Summary</h3>
   <!-- Statutes summary information -->
   ...

   <!--List of orders with selected statuses-->
   <div ng-controller="OrderTableController as orderTableCtrl">
    ...
   </div>

</div>

所以,OrderTableController 是 SummaryController 的子级。现在,在子控制器中,我想访问父属性。在父类中我定义:

orderApp.controller('SummaryController', ['$location', 'ordersApi', function($location, ordersApi){

    var ctrl = this;

    ctrl.summary = [];
    ctrl.test = 'test';

    ...

}]);

在子控制器中,我尝试获取“测试”属性:

   orderApp.controller('OrderTableController', ['$location', '$scope', 'ordersApi', function($location, $scope, ordersApi){

    var table = this;
    table.orders = [];


    console.log("Table orders 1");
    console.log($scope.$parent.test);

    ...

}]);

我希望 $scope.$parent 将包含 SummaryController 范围。但我不确定它包含什么,因为 $scope.$parent.test 是未定义的并且 $scope.$parent 具有名为 summaryCtrl 的属性。

我的问题是如何从 OrderTableController 中获取父母属性“测试”?

【问题讨论】:

  • 你试过$scope.$parent.summaryCtrl.test吗?
  • @SergioFandino 是的,我试过了,它正在工作。但我不明白为什么 $scope.$parent.test 没有。我的代码似乎有问题。

标签: javascript angularjs


【解决方案1】:

当您使用Controller As 功能时,它会在$scope 内创建一个属性,该属性将代表控制器本身。

因此,在您的 SummaryController 中,您有一个 test 属性。在SummaryController 的范围内,它将类似于$scope.summaryCtrl.test - 因为您将其定义为SummaryController as summaryCtrl

因此,您需要从您的子控制器沿相同的路径获取test 属性(这将比使用$scope.$parent 更优雅)。

如果您需要在控制器之间共享一些数据,您可以尝试使用共享服务(因为它们是单例)并在相关控制器中使用它们。

【讨论】:

    【解决方案2】:

    您只需在SummaryControllerOrderTableController 中添加一个引用,您就会从OrderTableController 中的SummaryController 中获得所有内容:)

    使用$scope.$parent 不是很优雅。不一定错,但不优雅。

    【讨论】:

    • 引用控制器是什么意思?能否附上示例代码?
    • 好的,给我几分钟
    • 对不起,我现在没有合适的例子,但是明天我会在这里添加一个带有示例的评论,好吗?
    【解决方案3】:

    这可能是因为您在父控制器中使用this 而不是$scope,如果您使用$scope.test='test',您可以按照您想要的方式获得它$scope.$parent.test。看到这个小提琴:http://jsfiddle.net/f2zyvf17/

    PD:您可以在这个问题中看到使用 $scope 或 this 的区别: 'this' vs $scope in AngularJS controllers

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2015-07-09
      • 2016-03-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多