2014-08-27 8 views
8

मैं पुन: लोड मेरी नियंत्रक के बिना ब्राउज़र यूआरएल अद्यतन करने के लिए यूआई-रूटर के नए deferIntercept() का उपयोग करें:ui रूटर deferIntercept और राज्य पैरामीटर

$rootScope.$on('$locationChangeSuccess', function(e, newUrl, oldUrl) { 
    e.preventDefault(); 
    if ($state.current.name !== 'search') { 
    $urlRouter.sync(); 
    } 
    $urlRouter.listen(); 
}); 
इस कोड के साथ

, ब्राउज़र के वापस बटन पर एक क्लिक पिछले एक यूआरएल को बदलता है, लेकिन मैं इस परिवर्तन को दर्पण करने के लिए अपने नियंत्रक राज्य को अपडेट करने में सक्षम नहीं हूं। $ राज्य पैराम में अभी भी मान सेट होते हैं जब उपयोगकर्ता ने पृष्ठ को पहली बार लोड किया था।

उपयोगकर्ता मेरे नियंत्रक के अंदर $ राज्य और $ राज्य पैराम्स ऑब्जेक्ट्स को अपडेट करने का सबसे अच्छा तरीका क्या है जब उपयोगकर्ता बैक बटन पर क्लिक करता है या यूआरएल मैन्युअल रूप से बदलता है?

धन्यवाद!

उत्तर

7

इवेंट हैंडलर के बाहर $urlRouter.listen() पर आपका कॉल रखा जाना चाहिए।

$rootScope.$on('$locationChangeSuccess', function(e, newUrl, oldUrl) { 
    e.preventDefault(); 
    if ($state.current.name !== 'search') { 
    $urlRouter.sync(); 
    } 
}); 

// Moved out of listener function 
$urlRouter.listen(); 

स्रोत:: कोड प्रदान की आप के लिए बदला जाना चाहिए स्निपेटofficial documentation for $urlRouterdeferIntercept विधि के लिए एक कोड नमूना प्रदान करता है। यह श्रोता समारोह के $urlRouter.listen() बाहर करने के लिए कॉल देता है:

var app = angular.module('app', ['ui.router.router']); 

app.config(function ($urlRouterProvider) { 

    // Prevent $urlRouter from automatically intercepting URL changes; 
    // this allows you to configure custom behavior in between 
    // location changes and route synchronization: 
    $urlRouterProvider.deferIntercept(); 

}).run(function ($rootScope, $urlRouter, UserService) { 

    $rootScope.$on('$locationChangeSuccess', function(e) { 
    // UserService is an example service for managing user state 
    if (UserService.isLoggedIn()) return; 

    // Prevent $urlRouter's default handler from firing 
    e.preventDefault(); 

    UserService.handleLogin().then(function() { 
     // Once the user has logged in, sync the current URL 
     // to the router: 
     $urlRouter.sync(); 
    }); 
    }); 

    // Configures $urlRouter's listener *after* your custom listener 
    $urlRouter.listen(); 
}); 
+0

'$ state' पैरामीटर तथापि अद्यतन नहीं रहता – Shamoon

+0

जब मैं' चलाते हैं (UserService.isLoggedIn()) वापसी मैं खोजने कर रहा हूँ; 'ऐसा नहीं वास्तव में मार्ग को सिंक्रनाइज़ नहीं करते जब तक कि मैं विशेष रूप से सिंक को कॉल नहीं करता – Maruf

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