2014-04-25 8 views
16

के साथ 404 त्रुटि पृष्ठ दिखाते समय यूआरएल को कैसे बदला जाए, मैं 404 त्रुटि पृष्ठ दिखाना चाहता हूं, लेकिन मैं स्थान में गलत यूआरएल भी सहेजना चाहता हूं।यूई-राउटर

मैं ऐसा ही कुछ कर देगा:

$urlRouterProvider.otherwise('404'); 
$stateProvider 
    .state('404', { 
     url: '/404', 
     template: error404Template 
    }); 

यूआरएल /404 लिए बदल जाएगा। वास्तविक यूआरएल को बदलने के बिना मैं गलत यूआरएल पर त्रुटि संदेश कैसे दिखा सकता हूं?

उत्तर

38

इस परिदृश्य के लिए समाधान है। हम 1) एक ui-router देशी सुविधा और 2) एक विन्यास सेटिंग का उपयोग करेंगे। working examplehere देखा जा सकता है।

1) ui रूटर राज्य परिभाषाओं की एक देशी सुविधा है:

url जरूरत नहीं है। राज्य को स्थान में इसके प्रतिनिधित्व के बिना परिभाषित किया जा सकता है।

2) कॉन्फ़िगरेशन सेटिंग है:

  • otherwise() for invalid routes, जो पैरामीटर के रूप में अच्छी तरह से (हवाला देते डिफ़ॉल्ट यूआरएल के साथ एक स्ट्रिंग होना जरूरी नहीं है, लेकिन हो सकता है एक समारोह):

पथ स्ट्रिंग | फंक्शन यूआरएल पथ जिसे आप रीडायरेक्ट करना चाहते हैं या फ़ंक्शन नियम जो यूआरएल पथ लौटाता है। $ इंजेक्टर और $ स्थान

समाधान:: इन दो के संयोजन समारोह संस्करण दो पैरामीटर पारित कर दिया है।

$stateProvider 
    .state('404', { 
    // no url defined 
    template: '<div>error</div>', 
    }) 

$urlRouterProvider.otherwise(function($injector, $location){ 
    var state = $injector.get('$state'); 
    state.go('404'); 
    return $location.path(); 
}); 

चेक कि इस working example

+1

यह एक आकर्षण की तरह काम किया। धन्यवाद @radim – Ray

+2

शानदार समाधान! धन्यवाद @ रैडीम – plong0

+0

यह सुंदर है, धन्यवाद – Hoto

15

में सभी ui-router#0.2.15 के रूप में आप $state.go() का उपयोग करें और अद्यतन करने के लिए नहीं विकल्प भेज सकते हैं स्थान:

$urlRouterProvider.otherwise(function($injector) { 

    var $state = $injector.get('$state'); 

    $state.go('404', null, { 
    location: false 
    }); 

}); 
हम बिना url और कस्टम otherwise state होता
+0

धन्यवाद! यह गतिशील यूआरएल के लिए 'अन्यथा' और '$ stateChangeError' अवरोध दोनों के साथ पूरी तरह से काम कर रहा है। – extempl