在my last question中,我确实搜索了一个解决方案,以便在.config期间使用AngularJS中的值。我学会了我必须使用一个提供者。现在,我尝试使用这个提供程序来设置一个值。似乎提供者有一个限制,我只能在.config期间设置一些东西?我得到了错误"TypeError: appState.setState不是函数“,但是setState是一个函数,至少对我的理解是这样的。我错了?
守则:
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()
})
})
.run(function ($rootScope, appState) {
$rootScope.$on('$routeChangeStart', function (event, next, current) {
if (next.$$route) {
appState.setState(next.originalPath);
// -> ERROR: "TypeError: appState.setState is not a function"
}
})
})
;发布于 2015-05-13 10:39:04
提供者就像一个两部分的服务,它的最低形式就像一个工厂:
aModule.provider('foo', function() {
this.$get = function() {
return 1;
}
});然后,您可以将其插入到任何其他服务、指令、控制器和run函数中:
aModule.controller('BarCtrl', function(foo) { ... });注意我是如何使用foo作为提供程序的名称的。
它所做的就是将$get 返回的注入控制器。也就是说,如果在控制器中记录foo,就会得到1。
那么提供者有什么意义呢?能够在应用程序运行之前配置服务。
aModule.provider('foo', function() {
var appState;
this.setState = function(newState) {
appState = newState;
}
this.$get = function() {
return appState;
}
});在这种情况下,除了$get函数之外,我们还有其他一些函数。我们怎样才能使用它们?我们需要注入提供者本身和,而不是工厂在里面。我们怎么能做到呢?
aModule.config(function(fooProvider) {
fooProvider.setState('Hello');
}注意我这次是如何使用fooProvider而不是只使用foo的。上面写着我在注射提供者本身。也就是说,只能将提供程序注入到.config函数和其他提供程序的构造函数中。
现在,如果您在控制器中记录foo,我们会看到:hello。
重复一遍,您在控制器中注入的是$get返回的内容,而不是外部的其他方法。这就是为什么不能在setState上使用run的原因,因为注入的是$get返回的内容。
https://stackoverflow.com/questions/30211779
复制相似问题