wikiApp.config(['$routeProvider','authService',
function($routeProvider,authService) {
var admin = authService.getLoggedin();
$routeProvider
.when('/hjem',{
templateUrl: 'partials/homeContent.html',
admin: false
})
.when('/articles/:article',{
templateUrl: 'partials/articles.html',
admin: false
})
.when('/newArticle',{
templateUrl: 'partials/postArticle.html',
controller: 'articleController',
admin: true
})
authService.getLoggedin()返回false或true,具体取决于用户是否登录。如果他们不被允许,我想不允许他们加入Url。
但我收到此错误: 错误:[$ injector:modulerr]由于以下原因无法实例化模块wikiApp: [$ injector:unpr]未知提供者:authService
答案 0 :(得分:28)
因此,要在配置中注入服务,您只需要通过添加'提供商来调用服务提供商。它的名字。
angular.module('myApp')
.service('FooService', function(){
//...etc
})
.config(function(FooServiceProvider){
//...etc
});
答案 1 :(得分:16)
在配置阶段你只能要求提供者($ routeProvider,$ locationProvider等)这意味着你不能注入任何其他实例,所以我建议你在运行阶段注入你的服务,你会有一个服务实例。
// configuration
app.config(function($routeProvider) {
});
//inject any instance
app.run(function($rootScope,authService) {
var admin = authService.getLoggedin();
$rootScope.$on('$routeChangeStart', function(next, current) {
// your logic here...
});
});
答案 2 :(得分:5)
如果你想调用一个外部函数(在你的情况下是服务函数)形成你的路由(.config),如下所示: templateProvider.getTemplate(&#39; about&#39;) < / p>
.state('index.about', {
url: "/about",
templateUrl: templateProvider.getTemplate('about'),
controller: 'AboutCtrl',
controllerAs: 'about',
data: {pageTitle: 'About Us Page'}
})
您无法为此创建服务或工厂。相反,您必须创建一个提供者。
以下是从名称生成模板路径的提供程序的真实示例:
(function () {
'use strict';
angular
.module('mega-app')
.provider('template', provider);
function provider(CONSTANT) {
// The provider must include a $get() method This $get() method
// will be invoked using $injector.invoke() and can therefore use
// dependency-injection.
this.$get = function () {
return {}
};
/**
* generates template path from it's name
*
* @param name
* @returns {string}
*/
this.getTemplate = function (name) {
return CONSTANT.TEMPLATES_URL + name + '/' + name + '.html';
}
/**
* generates component path from it's name
* @param name
* @returns {string}
*/
this.getComponent = function (name) {
return CONSTANT.COMPONENTS_URL + name + '.html';
}
};
})();
路由(.config)中此类提供程序的用法如下:
(function () {
'use strict';
angular
.module('mega-app')
.config(routes);
function routes($stateProvider, $urlRouterProvider, templateProvider) {
$stateProvider
//----------------------------------------------------------------
// First State
//----------------------------------------------------------------
.state('index', {
abstract: true,
url: "/index",
templateUrl: templateProvider.getComponent('content'),
controller: 'IndexCtrl',
controllerAs: 'index',
})
//----------------------------------------------------------------
// State
//----------------------------------------------------------------
.state('index.home', {
url: "/home",
templateUrl: templateProvider.getTemplate('home'),
controller: 'HomeCtrl',
controllerAs: 'home',
data: {pageTitle: 'Home Page'}
})
//----------------------------------------------------------------
// State
//----------------------------------------------------------------
.state('index.about', {
url: "/about",
templateUrl: templateProvider.getTemplate('about'),
controller: 'AboutCtrl',
controllerAs: 'about',
data: {pageTitle: 'About Us Page'}
})
//----------------------------------------------------------------
// Default State
//----------------------------------------------------------------
$urlRouterProvider.otherwise('/index/home');
};
})();
VIP注意:
注入提供者必须使用xxxProvider进行后缀(提供者的名称不应该后缀,只能在.config中注入)。