2016-10-21 271 views
0

我需要在兩個不同頁面(login.html和index.html)之間共享數據。 予定義的服務如下:Angularjs:在頁面之間共享數據

.service('loginData', function LoginData(){ 
     var userData = ''; 
     this.addUser = function(name){ 
      this.userData = name; 
      //return userData.user; 
     } 
     this.loggedUser = function(){ 
      return this.userData; 
     } 
}) 

爲login.html的定義,所述控制器:

.controller('loginCtrl',['$scope', '$http', '$window', 'loginData', function($scope, $http, $window, loginData){ 

    $scope.btnsubmit = function(username,password){ 

     //scope.user = data_to_send; 
     var doc = []; 
     $http.post('http://127.0.0.1:3000/authenticate',{user: username, pwd: password}   ) 
      .success(function(response) 
      { 
       console.log('1 : ' + response); 
       if (response != null){ 
        console.log('2 : ' + angular.fromJson(response).user); 
        doc = angular.fromJson(response); 
        loginData.addUser(doc[0].user); 
        console.log(doc[0].user); 
        // if I call loginData.LoggedUser here -> it works 
       } 
      }).error(function() 
      { 
       console.log('error') 
      }); 

     $window.location.href = 'index.html'; 
    } 
}]) 

爲index.html的

.controller('profileCtrl', function(loginData){ 

    console.log(loginData.loggedUser()); 

}) 

定義。如果我調用函數loginData控制器.log登錄控制器內的用戶,它運行良好。另一方面,從索引控制器調用相同的函數,則返回undefined。 我該如何解決它? 謝謝!

+0

您正在嘗試在定義它之前進行記錄。 IE的索引控制器在登錄控制器完成填充之前記錄用戶數據。你唯一的原因是未定義的,而不是「'是因爲userData最初被定義爲一個var而不是作爲其一部分(例如this.userdata =」「;) – Beartums

回答

0

服務是單向的,所以首先,我建議你檢查loginData實例。在第二步中,如果所有實例都正常,您可以檢查運行順序。最可能的情況是,第二個控制器在獲取值之前正在進行初始化,以及您未定義默認值未分配的原因var userData = '';這是一個局部變量。