2014-05-18 6 views
0

모바일 앱에서 인증을 구현하려고합니다. 기본적으로 사용자는 버튼을 클릭하여 인증이 완료되면 InAppBrowser에서 URL을 엽니 다. 그런 다음 REST URI를 호출하여 현재 사용자를 새로 고칩니다. 마지막으로 $scope을 새 데이터로 새로 고칩니다. 문제는 전체 범위가 새로 고쳐지지 않는다는 것입니다.전체 범위를 새로 고치는 방법

$scope.user은 새로 고치지 만 $scope.userLoggedIn이 아니며 $scope.user에 의존합니다.

resolve: { 
    user: ['User', function (User) { 
     return User.current(function (user) { 
      return user; 
     }, function (error) { 
      return {}; 
     }); 
    } 
    ] 
}, 
controller: function ($scope, $window, user, $translate, $parse) { 
    $scope.user = user; 

    $scope.redirectTo = function (path) { 
     var x = $window.open(path, '_blank') 
     x.addEventListener('loadstop', function(event) { 
      // $scope.$apply(function(){ //let angular know the changes 
       alert('loadStop: ' + event.url); 
       var url = event.url; 
       var filename = url.substring(url.lastIndexOf('/')+1); 
       if(filename == "mobile.login.html"){ 
        x.close(); 
        alert("refresh current user"); 
        user.$current(function (data) { 
          alert(data); 
          $scope.user = data; 
          alert(data); 
          alert($scope.userLoggedIn); 
         }); 
       } 
     // }); 
     }); 
     //$window.location.href = path; 
    }; 

    $scope.userLoggedIn = $scope.user.profile !== undefined; 
} 

답변

1

나는 그럭저럭 잘 만들 수 있었다. $scope.user의 변경 사항을 모니터링하려면 $watch을 사용해야합니다.

$scope.$watch('user', function(newValue, oldValue) { 
    alert("New Value" + $filter('json')(newValue)); 
    alert("Old Value" + $filter('json')(oldValue)); 
    $scope.userLoggedIn = newValue.profile !== undefined; 
    alert("user changed " + newValue.profile + " " + $scope.userLoggedIn); 
}); 
관련 문제