कोणीय-यूआई-राउटर का उपयोग करना, मैं $ 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, इसलिए यह मेरी मदद करेगा)