父母和子女控制者

时间:2017-07-13 13:07:43

标签: javascript angularjs controller separation-of-concerns

有两个控制器,父母和孩子。

<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

的情况下执行此操作

3 个答案:

答案 0 :(得分:1)

  

是否可以在不使用工厂或$ scope的情况下执行此操作。$ parent?

不,你不能。

作为旁注,我真的不喜欢使用$scope.$parent。在一个大型应用程序中,你可以通过叠加这些东西来放松对应用程序的控制。

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

答案 1 :(得分:0)

将$ 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

  };
});

答案 2 :(得分:0)

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

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函数中,您可以访问其上的任何数据/方法。希望有所帮助。