अन्यथा स्टेटप्रोवाइडर पर


95

कोणीय-यूआई-राउटर का उपयोग करना, मैं $ StateProvider पर अन्यथा विधि का उपयोग कैसे कर सकता हूं या मैं इसका उपयोग कैसे कर सकता हूं?


तुम क्या करने की कोशिश कर रहे हो? (कृपया ध्यान दें कि मैं पूरी तरह से समझ नहीं पा रहा हूं $stateProvider.otherwise, इसलिए यह मेरी मदद करेगा)
केविन मेरेडिथ

जवाबों:


123

आप केवल उपयोग नहीं कर सकते $stateProvider

आपको इसके $urlRouterProviderसमान कोड को इंजेक्ट करना और बनाना होगा

$urlRouterProvider.otherwise('/otherwise');

/otherwiseयूआरएल हमेशा की तरह एक राज्य पर परिभाषित किया जाना चाहिए:

 $stateProvider
    .state("otherwise", { url : '/otherwise'...})

इस लिंक को देखें जहाँ ksperling बताते हैं


आप वास्तव में उपयोग कर सकते हैं $stateProvider। यदि आप केवल एक टेम्प्लेट प्रदर्शित करना चाहते हैं तो यह कम काम है, लेकिन पुनर्निर्देशित नहीं। मुझे @ जुआन-हर्नानडेज़ का उत्तर पसंद है।
वेल्ट्सचैमरज़

क्या otherwiseइस मामले में (इस मामले में '/otherwise') पास किया गया है, राज्य के नाम (पहले पैरामीटर से .state) या urlविकल्प के मूल्य से मेल खाना चाहिए ?
d512

अब इसे हटा दिया गया है - @babyburger
Vedran

81

आप कैच ऑल सिंटैक्स ( ) $stateProviderका उपयोग कर सकते हैं । आपको निम्नलिखित की तरह अपनी सूची में सबसे नीचे एक राज्य विन्यास जोड़ना होगा:"*path"

$stateProvider.state("otherwise", {
    url: "*path",
    templateUrl: "views/error-not-found.html"
});

सभी विकल्पों को https://github.com/angular-ui/ui-router/wiki/URL-Rout#regex-parameters में समझाया गया है ।

इस विकल्प की अच्छी बात $urlRouterProvider.otherwise(...), जिसका विरोध किया गया है , वह यह है कि आप स्थान परिवर्तन के लिए मजबूर नहीं हैं।


क्या आप कृपया विस्तार से बता सकते हैं you're not forced to a location change:?
केविन मेरेडिथ

1
उसके कहने का मतलब यह है कि url वही रहेगा जो वह था। इसलिए यदि उपयोगकर्ता में जाता है /this/does/not/exist, तो यूआरएल एड्रेस बार में उस तरह से रहेगा। अन्य समाधान आपको/otherwise
मैट ग्रीर

मैंने आपके समाधान का उपयोग किया और यह काम किया (मैं उस url को रख सकता हूं जो नहीं पाया गया जो महान है क्योंकि मैं luisfarzati.github.io/angulartics का उपयोग कर रहा हूं और इस तरह से मैं उन पृष्ठों पर नेविगेशन भी देख सकता हूं जो मामलों में नहीं मिले) url उपयोगकर्ता को नेविगेट करने के लिए मौजूद नहीं है। हालांकि अगर मैं एक नियंत्रक के अंदर $ state.go ('अन्यथा') का उपयोग करके इस url पर नेविगेट करता हूं तो मैं url खो देता हूं। मैं इस स्थिति में स्पष्ट रूप से नेविगेट करता हूं जब उपयोगकर्ता किसी आइटम के विवरण पृष्ठ पर जाता है और सर्वर 404 (उदाहरण के लिए यदि आइटम हटा दिया गया था) लौटाता है। क्या आप इसे ठीक करने का कोई तरीका जानते हैं?
पीसीएटर

@ पीसीबी आप विकल्प स्थान = गलत का उपयोग कर सकते हैं और यूआरएल नहीं बदलेगा। उदाहरण के लिए। $ state.go ('अन्यथा', {}, {स्थान: मिथ्या})
JakubKnejzlik

35

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

    $urlRouterProvider.otherwise(function ($injector, $location) {
        var $state = $injector.get('$state');

        $state.go('defaultLayout.error', {
            title: "Page not found",
            message: 'Could not find a state associated with url "'+$location.$$url+'"'
        });
    });

कि अगर हम मध्य-एप या ऑनलोड होने पर चेक करने के तरीके पर अपनी समस्या हल कर लेते हैं, अन्यथा उपयोग किया जाता है - बहुत बहुत धन्यवाद :)
Jörn Berkefeld

आपने मेरा दिन बचाया!
मैलिग जूल

यदि आप इस यू को कम से कम $ इंजेक्षन की आवश्यकता चाहते हैं तो भूल न करें
स्टेन मोटो

3

ठीक है, मूर्खतापूर्ण क्षण जब आपको पता चलता है कि आपके द्वारा पूछा गया प्रश्न पहले से ही नमूना कोड की पहली पंक्तियों में उत्तर दिया गया है! बस नमूना कोड पर एक नज़र रखना।

       angular.module('sample', ['ui.compat'])
      .config(
        [        '$stateProvider', '$routeProvider', '$urlRouterProvider',
        function ($stateProvider,   $routeProvider,   $urlRouterProvider) {
          $urlRouterProvider
            .when('/c?id', '/contacts/:id')
            .otherwise('/'); // <-- This is what I was looking for ! 


          ....

यहाँ एक नज़र रखना।


3

मैं सिर्फ उन शानदार उत्तरों पर झंकार करना चाहता हूं जो पहले से ही उपलब्ध हैं। @uirouter/angularjsवर्ग के UrlRouterProviderरूप में चिह्नित वर्ग का नवीनतम संस्करण । वे अब UrlServiceइसके बजाय उपयोग करने की सलाह देते हैं । आप निम्न संशोधन के साथ एक ही परिणाम प्राप्त कर सकते हैं:

$urlService.rules.otherwise('/defaultState');

अतिरिक्त विधियाँ: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html


0

स्वीकार किए जाते हैं जवाब संदर्भ angular-routeके बारे में पूछता है ui-router। स्वीकार किए जाते हैं जवाब का उपयोग करता है "अखंड" $routeProvider है, जो की आवश्यकता है ngRouteमॉड्यूल (जबकि ui-routerजरूरतों ui.routerमॉड्यूल)

उच्चतम रेटेड जवाब का उपयोग करता है $stateProviderके बजाय, और की तरह कुछ कहते हैं .state("otherwise", { url : '/otherwise'... }), लेकिन मैं में "अन्यथा" कोई उल्लेख नहीं मिल सकता है प्रलेखन यह लिंक । हालाँकि, मुझे लगता है कि इस उत्तर में$stateProvider उल्लेख किया गया है जहाँ यह कहता है:

आप केवल उपयोग नहीं कर सकते $stateProvider। आपको इंजेक्ट करने की आवश्यकता है$urlRouterProvider

वहीं मेरा जवाब आपकी मदद कर सकता है। मेरे लिए, यह $urlRouterProviderइस तरह से उपयोग करने के लिए पर्याप्त था :

 my_module
   .config([
    , '$urlRouterProvider'
    , function(
        , $urlRouterProvider){
            //When the url is empty; i.e. what I consider to be "the default"
            //Then send the user to whatever state is served at the URL '/starting' 
            //(It could say '/default' or any other path you want)
            $urlRouterProvider
                    .when('', '/starting');
                    //...
    }]);

मेरा सुझाव ui-router प्रलेखन के अनुरूप है , ( यह विशिष्ट संशोधन ), जहां इसमें इसी तरह का उपयोग शामिल है। when(...)विधि (फ़ंक्शन के लिए पहला कॉल):

app.config(function($urlRouterProvider){
  // when there is an empty route, redirect to /index   
  $urlRouterProvider.when('', '/index');

  // You can also use regex for the match parameter
  $urlRouterProvider.when(/aspx/i, '/index');
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.