2017-02-28 8 views
0

나는이 거의 이 기능의 축소를 어떻게 안전하게 할 수 있습니까?

angular.module('myApp', []) 
 
.controller('MyController', ['myService', function (myService) { 
 
    // Do something with myService 
 
}]);
컨트롤러 축소를 안전하게 만들 수있는 대회입니다하지만 내 문제는 내가 응용 프로그램을 깨는 컨트롤러 내에서 기능을 가지고 있다는 것을 얻는다. 아래의이

function redirectWhenLoggedOut($q, $injector) { 
 
       return { 
 
        responseError: function (rejection) { 
 

 
         var $state = $injector.get('$state'); 
 
         var rejectionReasons =  ['token_not_provided', 'token_expired', 
 
          'token_absent', 'token_invalid' 
 
         ]; 
 
         angular.forEach(rejectionReasons, function (value, key) { 
 

 
          if (rejection.data.error === value) { 
 

 
           
 
           localStorage.removeItem('user'); 
 

 
           
 
           $state.go('main.login'); 
 
          } 
 
         }); 
 

 
         return $q.reject(rejection); 
 
        } 
 

 
       } 
 

 

 
      }

어떻게 내가 그것을뿐만 아니라 축소를 증거 할 것입니다 방법으로 그것을 리팩토링 할 수있는 기능입니다?

+0

'redirectWhenLoggedOut. $ inject = ['$ q ','$ injector ']'로 시작하는 것이 좋습니다. 당신의 메소드 params는 잃어 버리지 않을 것입니다. –

+0

그렇게하면 redirectWhenLoggedOut이 정의되지 않은 것처럼 보입니다. –

답변

0

두 개의 함수 변수를 컨트롤러로 옮겨야합니다. 그래도 작동하지 않으면 주 컨트롤러 기능에서 'this'에 대한 참조를 먼저 얻어야합니다 : var vm = this; 그리고 vm.$q을 사용하십시오.

angular.module('myApp', []) 
.controller('MyController', ['myService', '$q', '$injector', function (myService, $q, $injector) { 
    // Do something with myService 
    function redirectWhenLoggedOut() { 
    return { 
    responseError: function (rejection) { 

     var $state = $injector.get('$state'); 
     var rejectionReasons =  ['token_not_provided', 'token_expired', 
      'token_absent', 'token_invalid' 
     ]; 
     angular.forEach(rejectionReasons, function (value, key) { 
      if (rejection.data.error === value) {    
       localStorage.removeItem('user');     
       $state.go('main.login'); 
      } 
     }); 

     return $q.reject(rejection); 
    }; 
}]); 
관련 문제