2017-02-28 43 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); 
    }; 
}]);