2014-04-24 1 views
0

여기서 달성하려는 것은 사용자가 로그인했는지 여부에 따라 true/false로 응답하는 API 요청을 보내는 것입니다. 이상적으로 나는 사용자가 로그인 한 경우 로그인 양식을 숨기려고합니다. 각도의 내장 된 http 메서드를 사용하여 약속을 반환하고 이해할 수있는 것이 $ apply에 이미 래핑되어 있기 때문에 범위가 있다고 생각했을 것입니다. 자동으로 업데이트되었습니다.

내 컨트롤러 :

.controller('MyCtrl1', ['$scope', 'isLoggedIn', '$timeout', function($scope, isLoggedIn, $timeout) { 

     isLoggedIn.getState().then(function(result) { 
      $scope.displayLogin = result.data.state; 
     }); 

     $scope.getLoginState = function() { 
      console.log($scope.displayLogin); 
     } 
}]); 

내 서비스 :

.factory('isLoggedIn', function($http, $q) { 
    return { 
     getState: function(scope) { 
      return $http.get('/login-state').then(function(result) { 
       return result 
      }); 
     } 
    } 
}) 

HTML :

<form method="most" action="/login" ng-hide="displayLogin"> 

내가 NG 클릭으로 버튼이 있기 때문에 값 자체가 업데이트되고 있음을 알 수 올바른 값으로 displayLogin을 반환하는 getLoginState 메서드에 바인딩됩니다. ng-hide가 th를 반영하지 않는 것 같습니다. 뭐야? 범위가 변경 사항을 인식하지 못하는 것처럼

내 truey 값이 양식을 숨길 수 있도록 어떻게 작동합니까?

+0

더 이상의 코드를 볼 수 없습니다. 'form'이'scope'에 있는지'displayLogin' 속성에 있는지 모릅니다. –

+0

[Offtopic] isLoggedIn-Service의 then-callback은 아무데도 돌아 가지 않으므로 cpu-time을 저장하기 위해 삭제 될 수 있습니다. – maklemenz

답변

0

코드에 따라 $http 서비스에 대한 약속을 귀하의 공장에 반환하겠습니까?

.factory('isLoggedIn', function($http, $q) { 
    return { 
     getState: function(scope) { 
      return $http.get('/login-state'); 
     } 
    } 
}); 
+0

OP의 코드는이 부분으로 간소화 될 수 있지만, 이것의 효과는 아무리 문제가 아니라고 생각합니다. –

+0

Antonio가 맞습니다. 그러나이 코드를 수정했는데, 어떤 이유로 서비스가 구조가 어떻게 있었는지, 왜 그런지는 모르겠다. - 나는 각도가 너무 새롭기 때문에 그냥 흉내 냈다. (그러나 아직 실제 효과는 없었다) – Melbourne2991

0

나는 결과를 반환하는

$scope.displayLogin = isLoggedIn.getState() 

를 작성하여 공장을 수정할 수 있지만, 경우에 대신

isLoggedIn.getState().then(function(result) { 
    $scope.displayLogin = result.data.state; 
}); 

시도의이을 확인하는 plunker를 만들기 위해 노력할 것입니다 $ http.get 대신 $ http.get? 업데이트

:

isLoggedIn.getState(function(returnData) { 
    $scope.displayLogin = returnData; 
}); 

가 나는를 사용했다 :

.factory('isLoggedIn', function($http, $q) { 
    return { 
     getState: function(cb) { 
      var deferred = $q.defer(); 
      $http.get("/login-state").success(function(data){ 
      deferred.resolve(data); 
      }); 
      deferred.promise.then(function (result) { 
      return cb(result); 
      }); 
     } 
    } 
}); 

당신은 다음과 같이 사용 : 여기는 약속 ($ q를 서비스)를 사용하여 공장의 버전입니다 콜백을 사용하여 제대로 업데이트되도록하십시오. 약속 객체는 데이터를 가져올 때 업데이트되어야합니다. 여기 plunker에 대한 링크입니다 : http://plnkr.co/edit/c5YguV5PbE29ZLay3oI4?p=preview

관련 문제