错误:工厂中的未知提供程序/访问控制器

时间:2014-04-09 12:21:36

标签: angularjs

如何在以下代码中访问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 - 我正在努力让我了解有关节点和角度的用户身份验证。

1 个答案:

答案 0 :(得分:0)

$injector.get()仅可用于获取服务和服务。控制器通过$ControllerProvider实例化,因为它们需要特殊处理。他们需要一个范围,例如

此外,控制器不是单身人士,因此您不会 AuthenticationCtrl,而是 a AuthenticationCtrl

即使你有了你的控制器(这可能需要付出一些努力),但在你的情况下它会完全没用,因为AuthenticationCtrl没有方法(在github的代码中)。这意味着您无法调用AuthenticationCtrl.signOut(),因为signOut()是在视图范围内定义的。

正如其他人所指出的那样,您可以使用服务来完成此任务。或者您触发控制器侦听的事件。