2016-02-01 56 views
0

我實現了一個登錄系統的角度資源這樣

..factory.js

//Create a factory for the Login API 
angular.module(...) 
.factory('LoginEntity', ['$resource', function ($resource) { 
return $resource(
    'API/sigin', 
    { 
     save: {method: 'POST'}, 
     update: {method: 'PUT'} 
    } 
); 
}]) 

... controller.js

.controller('xxxController', ['LoginEntity', function(LoginEntity, $rootScope){ 
//in Controller add LoginEntity dependency 
    $rootScope.loggedinuser = {}; 

LoginEntity.save({ 
         username: user.userName, 
         password: user.password 
        }, 
        function (response) { 
         //success callback 
         $rootScope.loggedinuser = response; 
        }, 
        function() { 
         //error callback 

        }); 

}]); 

... AppCtrl

.controller('AppCtrl',function($scope,$rootScope){ 

    username = $rootScope.loggedinuser.username; 

    } 

這就是我所擁有的,但rootcope似乎並沒有在App控制器中可訪問。

任何幫助,或協助將高度讚賞

+0

看起來像在執行成功回調之前訪問'$ rootScope.loggedinuser'(假設錯誤回調產生了一些控制檯日誌,因此您知道執行成功了)。看看[Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) – Aprillion

+0

就像@Aprillion所說的,你在訪問$ rootScope.loggedinuser之前成功回調被執行。您可以將API調用移至AppCtrl而不是xxxController,並在成功回調中執行邏輯。 –

+0

感謝@ huan feng,我把它移到了App Ctrl上,它工作正常 – kplus

回答

2

您controller.js有一個錯誤,添加$rootScope你這樣的代碼:

.controller('xxxController', ['LoginEntity', '$rootScope', function(LoginEntity, $rootScope){ 
//in Controller add LoginEntity dependency 
    $rootScope.loggedinuser = {}; 

LoginEntity.save({ 
         username: user.userName, 
         password: user.password 
        }, 
        function (response) { 
         //success callback 
         $rootScope.loggedinuser = response; 
        }, 
        function() { 
         //error callback 

        }); 

}]); 
+0

如果它可以幫助你,請記住接受答案! –

+0

它仍然無法正常工作....無法讀取AppCtrl中未定義的屬性'loggedinuser' – kplus

+0

你會得到什麼結果? –

0

使用依賴注入。這應該有希望的工作:

.controller('AppCtrl',['$scope', '$rootScope', function($scope,$rootScope){ 

    username = $rootScope.loggedinuser.username; 

}]) 

這也使得在縮小,行爲不會中斷,文字變量名會自動改變。

+0

它仍然無法正常工作....無法讀取屬性'loggedinuser'未定義的AppCtrl – kplus

1

你的代碼改成這樣:

.controller('xxxController', ['LoginEntity', '$rootScope', function(LoginEntity, $rootScope){ 
/// 
}]); 

... AppCtrl

.controller('AppCtrl', ['$scope, '$rootScope', function($scope,$rootScope){ 
/// 
    }] 
+0

它仍然無法正常工作....無法讀取屬性'loggedinuser'的未定義在AppCtrl – kplus

0

你必須注入$ rootScope到控制器

.controller('xxxController', ['LoginEntity', '$rootScope', function(LoginEntity, $rootScope){ 
// TO DO Something 
}]); 

或暗示的註釋(小心縮小你的密碼)

.controller('xxxController', function(LoginEntity, $rootScope){ 
// TO DO Something 
}); 

這裏是控制器

.controller('AppCtrl',['$scope', '$rootScope', function($scope,$rootScope){ 

    $rootScope.loggedinuser = "your user detail" 

}]) 
0

注入$ rootScope我不知道這是否是你想要的。如果你想在localStorage中保存loggedinuser,你應該在成功回調中執行。

...AppCtrl 
.controller('AppCtrl', ['LoginEntity', '$scope', '$rootScope', function(LoginEntity, $scope,$rootScope){ 

    LoginEntity.save({ 
        username: user.userName, 
        password: user.password 
       }, 
       function (response) { 
        //success callback 
        localStorage.setItem('loggedinuser', JSON.stringify(response)); 
       }, 
       function() { 
        //error callback 
        LoggerService.error('Landing page:error during LoadTestEntity initiation'); 
       }); 

    } 
+0

它仍然無法正常工作......無法讀取AppCtrl中未定義的屬性'loggedinuser' – kplus

0
+0

謝謝,如果我檢索它像這樣$ scope.loggedInUser = JSON.parse(window.localStorage [ 'loggedInUser'] ||'{}');我可以訪問它在登錄範圍內訪問它,但它在範圍外返回undefined,是否有我遇到錯誤? – kplus

相關問題