gpt4 book ai didi

javascript - AngularJS 函数 DI 参数

转载 作者:行者123 更新时间:2023-12-03 11:42:11 27 4
gpt4 key购买 nike

我正在为应用程序的身份验证部分构建一个提供程序。使用依赖注入(inject)器时,我在将值传递给函数时遇到问题。

angular.module('security.authorization', ['security.service'])
.provider('securityAuthorization', {
requireRole: ['securityAuthorization', 'rolesAllowed', function(securityAuthorization, rolesAllowed) {
return securityAuthorization.requireRole(rolesAllowed);
}],

$get: ['security', '$q', function(security, $q) {
return {
requireRole: function(rolesAllowed) {
console.log(rolesAllowed);
}
};
}]
});

我正在尝试从 app.config $routeProvider 调用“requireRole”。

.when('/map', { controller: 'MapCtrl', templateUrl: 'partials/user/map.html',
resolve: {
authenticatedUser: securityAuthorizationProvider.requireRole('user')
}
})

但它给了我

Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to: TypeError: object is not a function

更新

app.config(function($routeProvider, $httpProvider, securityAuthorization) {
$routeProvider
.when('/map', { controller: 'MapCtrl', templateUrl: 'partials/user/map.html',
resolve: {
authenticatedUser: ['securityAuthorization', function(){
return securityAuthorization.requireRole('user');
}]
}
});
});

错误:

Error: [$injector:unpr] Unknown provider: securityAuthorization

最佳答案

您需要将一个函数作为第二个参数传递给providerhttps://docs.angularjs.org/guide/providers#provider-recipe

由于您似乎没有使用securityAuthorizationProvider,我已将其更改为使用工厂。如果您定义了一个工厂配方,则会在后台自动创建一个空的提供程序类型,并将 $get 方法设置为您的工厂函数。

.factory('securityAuthorization', ['security', '$q', function(security, $q) {
return {
requireRole: function(rolesAllowed) {
// require that there is an authenticated user
return security.auth().then(function(user) {
if (!security.isAuthenticated()) {
$q.reject('/signin');
}
else {
// check if role is allowed
if (rolesAllowed.indexOf(user.role) == -1) {
$q.reject('/signin');
}
else {
if (user.defaultPassword) {
$q.reject('/change-password');
}
else {
// This was in the original post, but $q doesn't have resolve
$q.resolve();
}
}
}
}, function(){
$q.reject('/signin');
});
}
};
}]);

在哪里设置路由

app.config(function($routeProvider, $httpProvider) {
$routeProvider
.when('/map', { controller: 'MapCtrl', templateUrl: 'partials/user/map.html',
resolve: {
authenticatedUser: ['securityAuthorization', function(securityAuthorization){
return securityAuthorization.requireRole('user');
}]
}
});
});

关于javascript - AngularJS 函数 DI 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26222589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com