2013-10-21 9 views
5

मेरे कारखाने की तरह दिखता है में परिवर्तन नहीं करता है:

'use strict'; 

angular.module('myApp') 
    .factory('httpInterceptor',['$q','$location', '$rootScope', function($q, $location, $rootScope){ 
    return { 
     response: function(response) { 

     if(response.success === false) { 
console.log("Redirecting"); 
      $location.path('/login'); 
      return $q.reject(response); 
     } 

     return response || $q.when(response); 
     } 
    } 
}]); 

यह लॉग बाहर थूक, लेकिन पथ नहीं बदलता है। ऐसा करने के लिए मैं क्या कर सकता हूं?

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/25579938/location-path-not-working-from-http-interceptor/ – Sirozha

उत्तर

10

प्रयास करें documentation for $location का कहना है:

ध्यान दें कि setters विंडो स्थान तुरंत अपडेट नहीं किया। इसके बजाए, $ लोकेशन सेवा स्कोप लाइफ-साइकल से अवगत है और खिड़की पर एक "प्रतिबद्ध" में कई $ स्थान उत्परिवर्तनों को जोड़ती है। स्कोप $ पाचन चरण के दौरान स्थान वस्तु।

इसलिए, अगर वादे को अस्वीकार करने पर $location पर प्रभाव पड़ता है, तो आप इच्छित परिवर्तन नहीं देख सकते हैं।

कोणीय जीवन चक्र के बाहर एक परिवर्तन को मजबूर करने के लिए, आप hashwindow.location का उपयोग कर सेट कर सकते हैं और फिर पेज का एक पुनः लोड कर सकते हैं। यह निश्चित रूप से, किसी भी कोड का निष्पादन रोक देगा जो सत्र का पालन करता है और मिटा देता है, लेकिन यदि उपयोगकर्ता लॉग इन नहीं होता है तो वह हो सकता है।

+0

मुझे यह बहुत निराशाजनक लगता है कि काम करने के लिए विभिन्न कोणीय समाधान प्राप्त करने में सक्षम नहीं है , और मेरे पुनर्निर्देशन के लिए खिड़की का स्थान लेना। – JnJnBoo

6

कुछ ऐसे मामले हैं जहां $ स्थान रीडायरेक्ट नहीं होगा कोणीय के लागू चक्र के बाहर। $ आवेदन के अंदर $ स्थान लपेटने का प्रयास करें।

$rootScope.$apply(function(){$location.path('/somelocatin'); }); 
+1

क्या आप कोणीय को धोखा दे रहे हैं? – Reyraa

+0

इस विधि का उपयोग कर जोखिम है? मैंने इसका इस्तेमाल किया - और यह काम किया। क्या यह आवेदन स्थिति को प्रभावित कर सकता है? – orberkov

3

यह एक पर कोणीय 1.3.14

myServices.factory('Factory', ['$rootScope', '$location', function ($rootScope, $location) { 
    // do something and redirect 
    $location.path('path') 
    $rootScope.$apply() 
}]) 

सूचना है कि $rootScope.$apply(), $location.path('path') कॉल के बाद है कुछ $ के अंदर यह लपेटकर कॉल कॉलबैक लागू कारण के लिए मेरे लिए काम किया के रूप में नहीं दिया ऊपर सुझाए गए ' काम नहीं कर रहा हूँ

संबंधित मुद्दे