2015-04-02 65 views
0

當我使用下面的代碼,我收到以下錯誤:

Provider 'Login' must return a value from $get factory method.

我查看了計算器的帖子herehere,但可弄清楚我做錯了什麼。

myApp.factory('Login', function($location, $firebaseAuth, Ref, Auth) { 
    var authData = Ref.getAuth(); 

    if (authData) {console.log('already logged in with ' + authData.uid)} else { 

     return Auth.$authAnonymously({rememberMe: true}).then(redirect, showError); 

     function redirect() { 
     $location.path('/account'); 
    } 

     function showError(err) { 
     Login.err = err; 
    } 
    } 
}); 

回答

2

根據factory您必須返回一個對象。由於您沒有返回任何內容,這意味着其他服務/控制器不能使用此服務。

如果您只是檢查身份驗證,它必須在您的身份驗證服務,它必須是一個IIFE功能。這將檢查並重定向用戶。

例如:

在這兩種認證/參考服務,創建一個IIFE

(function() { 
var authData = Ref.getAuth(); 

    if (authData) {console.log('already logged in with ' + authData.uid)} else { 

     return Auth.$authAnonymously({rememberMe: true}).then(redirect, showError); 

     function redirect() { 
     $location.path('/account'); 
    } 

     function showError(err) { 
     Login.err = err; 
    } 
    } 
})(); 

否則插入代碼裏面init()方法,並呼籲在您服務。所以這隻會運行一次。

當您想要爲您的應用程序的其他部分公開一個單例界面以便使用時,您必須使用服務。

+0

謝謝。我想要做的是檢查一下用戶是否已經被認證。如果不是,那麼我想驗證。如果已經通過身份驗證,那麼我真的不想做任何事情。你是否建議我將這個包裝在IIFE函數中,並將其更改爲服務而不是工廠? – Ken 2015-04-02 06:33:00

+0

在我的回答中更新了它。 – mohamedrias 2015-04-02 06:40:51

+0

謝謝,這是有道理的。如果我已經在Auth服務中返回一個對象,我仍然可以將上面的代碼添加到該服務中嗎?例如,在添加其餘代碼之前,我可以先使用'return $ firebaseAuth(Ref);'?如果沒有遇到其他問題,我似乎無法包含該附加行。 – Ken 2015-04-02 08:17:52

0

您必須返回一個對象或函數或從工廠返回一個值

相關問題