我的路由中permission
对象的访问权限为array
angular.module('app')
.config(['$stateProvider',function($stateProvider){
$stateProvider
.state('staffpanel', {
url: '...',
data: {
permissions: {
access: ['admin', 'moderator']
}
}
});
}])
从我的服务中我得到一个具有动态值的数组:
var access = ['admin', 'business','moderator];
我可以在array
对象中注入此permission
吗?在配置中,我只能使用provider
和constant
。无论如何我们可以在access
函数运行时动态注入config
数组的值吗?
答案 0 :(得分:2)
resolve
是映射依赖项的替代方法。如果您希望有resolve
或factories
可以访问 services
阶段之后的状态,请使用config
。
通过使用resolve
,您仍然可以将数据传递到州和控制器,而不会有太多麻烦。请注意,此时config
阶段已经过去了。另请注意resolve
阶段在加载controller
之前发生,因此您可以确保在实例化controller
时,您的数据已经注射了。
angular.module('app')
.config(['$stateProvider',function($stateProvider){
$stateProvider
.state('staffpanel', {
url: '...',
resolve:{
//note that you can inject other services/factories here.
permissions:['access',function(access){
//return useful stuffs based on your logic
return ['admin','moderator']
}]
}
});
}])
并且在控制器级别,您只需访问它:
angular.module('app')
.controller('myCtrl',['$scope','permissions',function($scope,permissions){
console.log(permissions); //['admin', 'moderator']
}]
但是,出于其他原因,如果您需要在 config
阶段进行配置设置,则必须使用提供商。
angular.module('app')
//inject your other providers here!
.config(['$stateProvider', 'accessProvider', function($stateProvider,accessProvider){
$stateProvider
.state('staffpanel', {
url: '...',
data: {
permissions: {
//you can use your accessProviders methods here
access: ['admin', 'moderator']
}
}
});
}])
了解AngularJs中的生命周期是很好的。这篇doc讨论了依赖注入的阶段。