2014-05-02 13 views
7

पर भेज रहा है मुझे ui-router के बारे में एक परेशान समस्या है। सबकुछ काम करता है जैसा मैं चाहता हूं, जहां सभी बुरे यूआरएल 404 राज्य में भेजे जाते हैं। हालांकि, भले ही मेरा डिफ़ॉल्ट स्थिति सही ढंग से प्रस्तुत किया गया हो जब यूआरएल /#/ है, / का यूआरएल /404/ पर रीडायरेक्ट किया गया है। मैं दोनों को / और /#/ दोनों में कैसे सर्वर कर सकता हूं?कोणीय यूआई-राउटर रूट यूआरएल 404

app.js

MyApp.config(function ($stateProvider, $urlRouterProvider) { 

// For any unmatched url, send to 404 
$urlRouterProvider.otherwise("/404/"); 

$stateProvider 
    // Home (default) 
    .state('default', { 
     url: '/', 
     resolve: { 
      ... 
     }, 
    } 
}); 

किसी भी मदद की बहुत सराहना।

+0

क्या मेरा उत्तर आपके मुद्दों को हल करता है? – Ross

उत्तर

11

मुझे लगता है कि यह अपनी आवश्यकताओं को पूरा करेगा -

MyApp.config(function($stateProvider, $urlRouterProvider) { 
    // the known route 
    $urlRouterProvider.when('', '/'); 

    // For any unmatched url, send to 404 
    $urlRouterProvider.otherwise('/404'); 

    $stateProvider 
     // Home (default) 
     .state('default', { 
      url: '/', 
      resolve: { 
       // ... 
      } 
      // .... 
     }); 
}); 

मैं this post में संदर्भित। डेटा के साथ मार्गों को संभालने के लिए आपको नियमित अभिव्यक्ति का उपयोग करने की आवश्यकता हो सकती है।

अपने यूआरएल में # के बजाय आप एक क्वेरी स्ट्रिंग का भी उपयोग कर सकते हैं और इसे $stateParams के माध्यम से किसी राज्य में ले जा सकते हैं।

// .... 

    $stateProvider 

    .state('default', { 
     url: '/?data', 
     templateUrl: 'templates/index.html', 
     controller: 'defaultCtrl' 
    }) 

और फिर आप डेटा के साथ घर जाने के लिए नीचे इस का उपयोग कर सकते हैं - - आप में डेटा stringify की जरूरत नहीं है

var toStateData = { 
    key1: 'value1', 
    key2: 'value2' 
} 

$state.go('default', {data: JSON.stringify(toStateData)}); 

यहाँ आप यह कैसे कर सकते हैं $stateParams लेकिन यह एक पैरामीटर के साथ अधिक विकल्प की अनुमति देगा। defaultCtrl नियंत्रक में आप इस तरह से पारित कर दिया क्वेरी स्ट्रिंग प्राप्त कर सकते हैं -

var stateData = JSON.parse($stateParams.data); 
var key1 = stateData.key1; 
// .... 
+1

अरे, मुझे सही दिशा में लेने के लिए धन्यवाद - यह नहीं पता था कि '।' एक उपनाम प्रदान करता है। हालांकि, मेरा उपयोग मामला असल में आपके द्वारा पोस्ट किया गया रिवर्स है। जब आधार '/' यूआरएल पाया जाता है, तो मुझे इसे राज्य राउटर में '/ # /' ('''' और ''/'' 'के लिए उपनाम की आवश्यकता होती है। यदि आप अपना उत्तर समायोजित करते हैं, तो मैं खुशी से स्वीकार करूंगा;) –

+1

यह मैंने जो जोड़ा: '$ urlRouterProvider.when ('', '/');' –

+0

@ डार्विनटेक हे मैंने जवाब अपडेट किया, खुशी हुई, इससे मदद मिली। – Ross

2

मैं केवल राज्यों के साथ ऐसा करना चाहता था, इसलिए कोई यूआरएल प्रदाता शामिल किया गया। मैं निम्नलिखित समाधान जो मुझे लगता है कि अच्छा है पाया:

(खेद यह coffeescript है)

$stateProvider. 
    state('base.public.notFound', 
     url:   '^*path' 
     templateUrl: 'views/layouts/404.html' 
    ) 

पिछले राज्य के रूप में इस रखो और आप कर रहे हैं!

+1

मैं यह ध्यान रखना चाहूंगा कि किसी भी कारण से, यह मेरे लिए काम नहीं करता है। –

+0

मुझे आपका कोड नहीं पता है, लेकिन इस के साथ, आपको'otherwise' या ऐसे, केवल राज्यप्रोवाइडर का उपयोग नहीं करना चाहिए। –

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