如何在以下代码中访问AuthenticationCtrl?
代码:
app.factory( 'AuthenticationInterceptor', function( $q, $injector )
{
return {
response: function (response)
{
// Bypass the success.
return response;
},
responseError: function (response)
{
// Sign out if the user is no longer authorized.
if (response.status == 401)
{
console.log("test 1"); // shows up in console
var AuthenticationCtrl = $injector.get( 'AuthenticationCtrl' );
console.log("test 2"); // does not show up in console
AuthenticationCtrl.signOut();
}
return $q.reject(response);
}
};
});
错误:
Error: Unknown provider: AuthenticationCtrlProvider <- AuthenticationCtrl
at Error (native)
at file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:2765:46
at Object.getService [as get] (file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:2891:39)
at file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:2770:45
at Object.getService [as get] (file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:2891:39)
at responseError (file:///C:/node/corsnection/client/app/scripts/common/interceptor/AuthenticationInterceptor.js:17:40)
at wrappedErrback (file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:7518:57)
at wrappedErrback (file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:7518:57)
at file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:7630:53
at Object.Scope.$eval (file:///C:/node/corsnection/client/app/components/angular-unstable/angular.js:8926:28)
PS:代码来自https://github.com/pablodenadai/Corsnection - 我正在努力让我了解有关节点和角度的用户身份验证。
答案 0 :(得分:0)
$injector.get()
仅可用于获取服务和服务。控制器通过$ControllerProvider
实例化,因为它们需要特殊处理。他们需要一个范围,例如
此外,控制器不是单身人士,因此您不会 AuthenticationCtrl
,而是 a AuthenticationCtrl
。
即使你有了你的控制器(这可能需要付出一些努力),但在你的情况下它会完全没用,因为AuthenticationCtrl
没有方法(在github的代码中)。这意味着您无法调用AuthenticationCtrl.signOut()
,因为signOut()
是在视图范围内定义的。
正如其他人所指出的那样,您可以使用服务来完成此任务。或者您触发控制器侦听的事件。