父母和孩子控制器

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

<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情况下执行此操作$scope.$parent


是否有可能做到这一点,而不使用工厂或$ scope。$ parent?

不,你不能。

作为一个方面说明,我不太喜欢使用$scope.$parent 。 在一个大的应用程序中,你可以通过重叠这些东西来控制你的应用程序。

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


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

  };
});

虽然如前所述,服务/工厂在这里可能会更好,但如果你想要另一个选项,你可以使用组件。 例:

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

链接地址: http://www.djcxy.com/p/77565.html

上一篇: Parent and child controllers

下一篇: factoy vs service in angular