【问题标题】:Parent and child controllers父子控制器
【发布时间】:2017-12-18 06:59:24
【问题描述】:

有两个控制器,父级和子级。

<div ng-controller="firstCtrl as first">
   <div ng-controller="secondCtrl as second"></div>
</div>

JS:

app.controller('firstCtrl', function() {
  this.func = function() {
    //some code
  };
});

app.controller('secondCtrl', function() {
  this.parent.func(some_data);//thats what I need to do   
});

是否可以在不使用工厂或$scope.$parent 的情况下做到这一点?

【问题讨论】:

标签: javascript angularjs controller separation-of-concerns


【解决方案1】:

虽然如前所述,服务/工厂在这里可能更好,但如果您想要其他选项,您可以使用组件。示例:

angular.module('app')
   .component('parent', {
       controller: function() {
            var $ctrl = this;
            $ctrl.doStuff = function() {};
       },
       templateUrl: '/view.html'
   });

angular.module('app')
   .component('child', {
       require: {
           parent: '^parent'
       },
       controller: function() {
            var $ctrl = this;
            $ctrl.$onInit() = function() {
                $ctrl.parent.doStuff();
            };
       },
       templateUrl: '/view.html'
   });

将父组件添加到所需的组件中,然后在 $onInit 函数中,您将可以访问其上的任何数据/方法。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    将 $scope 注入到你的父控制器和子控制器中,并将父级的方法保存到 $scope 中,如下所示:

    家长:

    app.controller('firstCtrl','$scope',function(){
      $scope.yourFunctionName = function(some_data){
      //some code
      };
    });
    

    在子进程中调用父控制器方法如下:

    孩子

    app.controller('secondCtrl', '$scope',function(){
      $scope.yourFunctionName(some_data);//thats what I need to do
    
      };
    });
    

    【讨论】:

      【解决方案3】:

      不使用 factory 或 $scope.$parent 是否可以做到这一点?

      不,你不能。

      附带说明,我不太喜欢使用$scope.$parent。在一个大的应用程序中,你可以通过叠加这些东西来真正放松对应用程序的控制。

      如果您想在控制器之间共享一个功能,您可能需要使用service。

      【讨论】:

      • 我可以在html中调用两个函数吗:first.func(),second,func()?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2017-10-01
      • 2019-04-01
      • 1970-01-01
      相关资源
      最近更新 更多