可以控制器注入另一个控制器是同一模块的一部分?
例:
var app = angular.module('myAppModule', [])
.controller('controllerOne', ['$scope', function($scope){
$scope.helloWorld = function(){
return 'Hello World';
}
}])
.controller('controllerTwo', ['$scope', 'controllerOne', function($scope, controllerOne){
console.log(controllerOne.helloWorld());
}])
我不断收到关于controllerOne未知的供应商。我看不到,因为它们在同一模块中共存那怎么可能。任何帮助将非常感激。
你需要通过使用$controller
依赖,你可以注入一个控制器到另一个
.controller('controllerTwo', ['$scope', '$controller', function($scope, $controller){
$controller('controllerOne', {$scope: $scope})
//inside scope you the controllerOne scope will available
}]);
但喜欢service/factory
共享数据
将你的逻辑为“服务”(或者是工厂/服务/供应商)。我个人比较喜欢的工厂,我只是喜欢控制我自己的对象,而不是使用this
或类似的东西与其他选项。
使用服务,你给自己的能力,抽象业务逻辑从你的控制器,并作出这样的逻辑 - 可重复使用的 - !
var app = angular.module('myAppModule', [])
// typically people use the word Service at the end of the name
// even if it's a factory (it's all the same thing really...
.factory('sharedService', function () {
var methods = {};
methods.helloWorld = function () {
return 'Hello World!';
};
// whatever methods/properties you have within this methods object
// will be available to be called anywhere sharedService is injected.
return methods;
})
通知sharedService注入
.controller('ControllerOne', ['$scope', 'sharedService', function($scope, sharedService) {
$scope.helloWorld = sharedService.helloWorld();
}])
// Notice sharedService is injected here as well
.controller('ControllerTwo', ['$scope', 'sharedService', function($scope, sharedService){
// Now we can access it here too!
console.log( sharedService.helloWorld() );
}]);
附注:控制器,予以资本化,以显示其重要性!
服务的力量:)
如果一个controllerTwo需要调用相同的功能controllerOne,您可能希望创建一个服务来处理它。 Angular Services - 他们通过依赖注入整个程序访问。
var app = angular.module('myAppModule', [])
.controller('controllerOne', ['$scope', 'Hello', function($scope, Hello){
console.log(Hello.helloWorld() + ' controller one');
}])
.controller('controllerTwo', ['$scope', 'Hello', function($scope, Hello){
console.log(Hello.helloWorld() + ' controller two');
}])
.factory('Hello', [function() {
var data = {
'helloWorld': function() {
return 'Hello World';
}
}
return data;
}]);
希望这可以帮助!
你不能在另一个控制器注入控制器,只有serviceProviers是injectable.That是你在控制器的一个越来越误差未知供应商的原因。
利用服务来代替,注入他们的控制器,如果有一些来controllers.Services之间共享功能在控制器之间共享数据的最佳方式。
您可以在$ rootScope声明一个变量或函数或者说对象,它存在于你的整个应用程序。