2016-10-21 3 views
0

두 개의 서로 다른 페이지 (login.html 및 index.html)간에 데이터를 공유해야합니다. 다음 는 I는 서비스 정의 :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'; 
    } 
}]) 

I는 함수 loginData 호출하면 index.html을

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

    console.log(loginData.loggedUser()); 

}) 

정의 제어기 .logged 사용자가 로그인 컨트롤러 안에 있으면 잘 작동합니다. 반면 인덱스 컨트롤러에서 동일한 함수를 호출하면 정의되지 않은 값이 반환됩니다. 어떻게 해결할 수 있습니까? 감사합니다.

+0

정의되기 전에 기록하려고합니다. IE는 로그인 컨트롤러가 로그인하기 전에 userdata를 로깅합니다. userData가 처음에이 항목의 일부가 아닌 var로 정의되었으므로 ('this.userdata = "";) 사용자가 정의되지 않은 이유는'user '입니다. – Beartums

답변

0

서비스는 각도가있는 싱글 톤이므로 먼저 무엇보다 loginData 인스턴스를 확인하는 것이 좋습니다. 두 번째 단계에서 모든 인스턴스가 정상이면 실행 순서를 확인할 수 있습니다. 가능한 한 두 번째 컨트롤러가 값을 받기 전에 초기화 중이므로 var userData = ''; 할당되지 않은 기본값이 정의되지 않은 이유는 로컬 변수입니다.

관련 문제