Javascript AngularJS指定一个控制器依赖于另一个控制器的方式

Javascript AngularJS指定一个控制器依赖于另一个控制器的方式,javascript,angularjs,Javascript,Angularjs,我有一个场景,其中我有一个父控制器和多个子控制器,它们可以基于一些业务逻辑存在于一个页面上 控制器在dom中的元素上指定,子控制器在ngSwitch控制的元素上指定 e、 这是我正在做的一个相当做作的例子 父控制器 app.controller('parentCntrl',function($scope){ $scope.model = {}; $scope.model.foo = 42; //More stuff }); app.control

我有一个场景,其中我有一个父控制器和多个子控制器,它们可以基于一些业务逻辑存在于一个页面上

控制器在dom中的元素上指定,子控制器在ngSwitch控制的元素上指定

e、 这是我正在做的一个相当做作的例子

父控制器

app.controller('parentCntrl',function($scope){
        $scope.model = {};
        $scope.model.foo = 42;
        //More stuff
});
app.controller('childCntrl',function($scope){
     $scope.model.bar = 24;
     $scope.myFunction = function() {
        return "The answer is: " + $scope.model.foo;
     };
});
子控制器

app.controller('parentCntrl',function($scope){
        $scope.model = {};
        $scope.model.foo = 42;
        //More stuff
});
app.controller('childCntrl',function($scope){
     $scope.model.bar = 24;
     $scope.myFunction = function() {
        return "The answer is: " + $scope.model.foo;
     };
});
如您所见,子控制器依赖于
$scope.model
对象是否已经存在,并依赖于向上遍历原型链来找到它

有没有办法在子控制器上指定它们需要特定的父控制器才能工作?我的子控制器需要查看父作用域上的属性。或者我应该遵循其他最佳实践吗


谢谢

最好的方法是使用外部的“两个控制器”服务,这可以让您在两个控制器之间进行有效的通信,并且您的
$scope.model
可以很好地安全地保存

例如:

yourapp.factory('myextprovider', function(){
  // Your code where to updare the $scope.model
})

yourapp.controller('parentctrl', function(myextprovider, $scope){
  $scope.model = myextprovider.somemethods
})
yourapp.controller('childctrl', function(myextprovider, $scope){
  $scope.model = myextprovider.othermethods
})
另一种方法是,根据使用指令的情况,可以有效地为子指令要求外部父指令,并共享作用域


我希望我能给您一个在类似情况下如何处理的想法。

如果我们在DOM级别上定义控制器(父控制器、子控制器)时讨论模型,那就好了。但是,当问题是关于代码时,对于这种事情,您必须使用
共享工厂或服务
,并将其作为两个控制器的依赖项传递<代码>保留所有共享数据。你会没事的我想已经有人接了。。但服务是控制器之间共享数据的最佳实践。