कोणीय-यूआई-राउटर का उपयोग करना, मैं $ StateProvider पर अन्यथा विधि का उपयोग कैसे कर सकता हूं या मैं इसका उपयोग कैसे कर सकता हूं?
कोणीय-यूआई-राउटर का उपयोग करना, मैं $ StateProvider पर अन्यथा विधि का उपयोग कैसे कर सकता हूं या मैं इसका उपयोग कैसे कर सकता हूं?
जवाबों:
आप केवल उपयोग नहीं कर सकते $stateProvider
।
आपको इसके $urlRouterProvider
समान कोड को इंजेक्ट करना और बनाना होगा
$urlRouterProvider.otherwise('/otherwise');
/otherwise
यूआरएल हमेशा की तरह एक राज्य पर परिभाषित किया जाना चाहिए:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
इस लिंक को देखें जहाँ ksperling बताते हैं
$stateProvider
। यदि आप केवल एक टेम्प्लेट प्रदर्शित करना चाहते हैं तो यह कम काम है, लेकिन पुनर्निर्देशित नहीं। मुझे @ जुआन-हर्नानडेज़ का उत्तर पसंद है।
otherwise
इस मामले में (इस मामले में '/otherwise'
) पास किया गया है, राज्य के नाम (पहले पैरामीटर से .state
) या url
विकल्प के मूल्य से मेल खाना चाहिए ?
आप कैच ऑल सिंटैक्स ( ) $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
:?
/this/does/not/exist
, तो यूआरएल एड्रेस बार में उस तरह से रहेगा। अन्य समाधान आपको/otherwise
आप मैन्युअल रूप से $ फ़ंक्शन को अन्यथा फ़ंक्शन में भी इंजेक्ट कर सकते हैं, जिसे आप फिर एक गैर-यूआरएल स्थिति में नेविगेट कर सकते हैं। इससे ब्राउज़र का एड्रेसबार नहीं बदला जा सकता है, जो पिछले पृष्ठ पर वापस जाने के लिए सहायक है।
$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+'"'
});
});
ठीक है, मूर्खतापूर्ण क्षण जब आपको पता चलता है कि आपके द्वारा पूछा गया प्रश्न पहले से ही नमूना कोड की पहली पंक्तियों में उत्तर दिया गया है! बस नमूना कोड पर एक नज़र रखना।
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 !
....
मैं सिर्फ उन शानदार उत्तरों पर झंकार करना चाहता हूं जो पहले से ही उपलब्ध हैं। @uirouter/angularjs
वर्ग के UrlRouterProvider
रूप में चिह्नित वर्ग का नवीनतम संस्करण । वे अब UrlService
इसके बजाय उपयोग करने की सलाह देते हैं । आप निम्न संशोधन के साथ एक ही परिणाम प्राप्त कर सकते हैं:
$urlService.rules.otherwise('/defaultState');
अतिरिक्त विधियाँ: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
स्वीकार किए जाते हैं जवाब संदर्भ 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');
})
$stateProvider.otherwise
, इसलिए यह मेरी मदद करेगा)