有两个控制器,父母和孩子。
<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
?
答案 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函数中,您可以访问其上的任何数据/方法。希望有所帮助。