Angularjs 棱角;未知提供者";-如何在routeProvider配置中使用工厂?
在使用Angular时,我试图更好地理解如何使用工厂、服务、常量、路由和其他核心概念。所以我用node、express、jade和angular构建了一个简单的演示应用程序 现在我想在routeProvider配置中使用一个值。我创建了一个常量,这个很好用。为了使它在将来的使用中更加灵活,我建立了一个工厂,但在“未知提供者”的情况下失败了。这是一个角度的实例化顺序问题吗?为什么我不能将工厂注入Angularjs 棱角;未知提供者";-如何在routeProvider配置中使用工厂?,angularjs,angularjs-service,ngroute,angularjs-provider,Angularjs,Angularjs Service,Ngroute,Angularjs Provider,在使用Angular时,我试图更好地理解如何使用工厂、服务、常量、路由和其他核心概念。所以我用node、express、jade和angular构建了一个简单的演示应用程序 现在我想在routeProvider配置中使用一个值。我创建了一个常量,这个很好用。为了使它在将来的使用中更加灵活,我建立了一个工厂,但在“未知提供者”的情况下失败了。这是一个角度的实例化顺序问题吗?为什么我不能将工厂注入.config部分?之前,我用服务而不是工厂尝试了相同的方法,但出现了相同的错误。希望我没有犯一个简单的
.config
部分?之前,我用服务而不是工厂尝试了相同的方法,但出现了相同的错误。希望我没有犯一个简单的打字错误或语法错误,到目前为止我没有发现任何错误
angular
.module('main', [
'ngRoute'
])
.constant('cApp', {
'defaultPath': '/home'
})
.factory('svcState', function(){
var appState;
function getState(){
return appState;
}
function init() {
appState='/home';
}
init();
return{
getState: getState
};
})
.config(function($routeProvider, svcState, cApp){
$routeProvider
.when('/home', {
templateUrl: "partials/home"
})
.when('/info', {
templateUrl: "partials/info"
})
.otherwise({
//redirectTo: cApp.defaultPath // this works fine
redirectTo: svcState.getState // this fails with "Error: [$injector:unpr] Unknown provider: svcState"
})
})
;
svcState
应该是提供者而不是服务。因为在配置阶段内无法访问服务/工厂。您需要将svcState
的实现更改为provider,以便它在配置块中可用
在提供程序实现之后,您可以在配置块中使用svcStateProvider
注入该提供程序
.config(function($routeProvider, svcStateProvider, cApp){
$routeProvider
.when('/home', {
templateUrl: "partials/home"
})
.when('/info', {
templateUrl: "partials/info"
})
.otherwise({
redirectTo: svcStateProvider.getState() //<--change herer
})
})
.config(函数($routeProvider、svcStateProvider、cApp){
$routeProvider
.when(“/home”{
templateUrl:“partials/home”
})
.when(“/info”{
templateUrl:“部分/信息”
})
.否则({
重定向到:svcStateProvider.getState()//以下是我更改的内容:
angular
.module('main', [
'ngRoute'
])
.provider('appState', function(){
var appState;
this.setState = function(newState) {
appState = newState;
};
this.getState = function() {
return appState;
};
this.$get = function() {
return appState;
};
function init() {appState='/home';}
init();
})
.config(function($routeProvider, appStateProvider){
$routeProvider
.when('/home', {
templateUrl: "partials/home"
})
.when('/info', {
templateUrl: "partials/info"
})
.otherwise({
redirectTo: appStateProvider.getState()
})
})
;
快速回答..非常感谢!我知道服务和工厂是从提供程序派生的。但好的,它似乎必须是“真正的”提供程序。@Rainer是的,您需要将服务实现更改为provider@Rainer很高兴帮助你..谢谢:)嗨@pankajparkar,也许你还有一分钟?我现在尝试这样设置一个值,但得到一个错误“非函数”:.run(函数($rootScope,appState){$rootScope.$on('$routeChangeStart',函数(event,next,current){if(next.$$route){appState.setState(next.originalPath);//错误:“类型错误:appState.setState不是函数”})
对不起,我还需要在这里更好地学习格式化。。。