मैं कोणीय जे एस में एक 'मार्ग' से मेल नहीं खाता और यह बहुत अच्छा काम करता है, जब तक कि: fooId घटक या तो '/' या '% 2F' (एन्कोडेड फॉर्म)कोणीय जे एस 'मार्ग'% 2F साथ घटक (इनकोडिंग '/')
मैं यह काम कैसे कर सकता हूं, मेरे 'fooId' में शामिल हो सकते हैं?
मैं कोणीय जे एस में एक 'मार्ग' से मेल नहीं खाता और यह बहुत अच्छा काम करता है, जब तक कि: fooId घटक या तो '/' या '% 2F' (एन्कोडेड फॉर्म)कोणीय जे एस 'मार्ग'% 2F साथ घटक (इनकोडिंग '/')
मैं यह काम कैसे कर सकता हूं, मेरे 'fooId' में शामिल हो सकते हैं?
आप आसानी से ऐसा नहीं कर सकते हैं क्योंकि यदि आप %2F
के साथ एक लिंक का उपयोग करते हैं, तो ब्राउज़र केवल आपके लिए इसे डीकोड करेगा और यह /
होगा। AngularJS वर्तमान में $route
पैराम्स में /
का उपयोग करने की अनुमति नहीं देता है।
आप डबल यह सांकेतिक शब्दों में बदलना कर सकते हैं, इस plnkr में की तरह: http://plnkr.co/edit/e04UMNQWkLRtoVOfD9b9?p=preview
var app = angular.module('app', []);
app.controller('HomeCtrl', function ($scope, $route) {
});
app.controller('DirCtrl', function ($scope, $route) {
var p = $route.current.params;
$scope.path = decodeURIComponent(p.p1);
});
app.config(function ($routeProvider) {
$routeProvider
.when('/', {templateUrl: 'home.html', controller: 'HomeCtrl'})
.when('/dir/:p1', {templateUrl: 'dir.html', controller: 'DirCtrl'})
.otherwise({redirectTo: '/'});
});
और लिंक होगा: <a href="#/dir/a%252Fb%252Fc">click here</a>
।
एक अन्य विकल्प आपके पैरामीटर में /
पात्रों में से एक निर्धारित संख्या यहां पाया जा सकता है, तो आप है How can I make the angular.js route the long path
मुझे मैन्युअल रूप से एन्कोड और पुनः-एन्कोड करना था: फ़ंक्शन एन्कोड स्लैश (यूरी) { \t वापसी uri.replace (/ \ // g, '% 252F')। (% 2F/gi, '% 252F '); } फ़ंक्शन डिकोड स्लैश (uri) { \t वापसी uri.replace (/% 2F/gi, "/"); } इन्हें $ स्थान या पढ़ने के लिए लिखते समय उपयोग किया जाता है (उदा। $ रूट पैराम्स से) लेकिन यह बहुत अच्छा काम करता है, धन्यवाद! – ConfusedNoob
क्या यह कोणीय 2 में समस्या को हल करने का कोई तरीका है? – higunjan
लैंगडन की जवाब के आधार पर, मैं एक फिल्टर जो सब कुछ दो बार encodes, और एक दूसरे से जो डीकोड बनाया :
.filter('escape', function() {
return function(input) {
return encodeURIComponent(encodeURIComponent(input));
};
})
.filter('unescape', function() {
return function(input) {
return decodeURIComponent(input);
};
});
मैं अपने उत्पाद लिंक में इस का उपयोग इस प्रकार है:
<a href="#/p/{{product.id}}/{{product.name | escape}}">
जनसंपर्क पर oduct पेज, मैं उत्पाद का नाम डीकोड करता हूं:
<h1>{{product.name | unescape}}</h1>
आपको यहां कुछ भी एन्कोड करने की आवश्यकता नहीं है। बस के रूप में नीचे वर्णित अपना रास्ता परम में * जोड़ सकते हैं और सक्षम html5Mode
app.config(function ($routeProvider, $locationProvider) {
$routeProvider
.when('/home', {templateUrl: 'home.html', controller: 'HomeCtrl'})
.when('/base/:path*', {templateUrl: 'path.html', controller: 'pathCtrl'})
.otherwise({redirectTo: '/home'});
});
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
मेरे लिए काम करता है। यह मेरी राय में जवाब होना चाहिए। – MarzSocks
$ locationProvider.hashPrefix ('') शामिल हैं; आपकी कॉन्फ़िगरेशन में ।
ओपी को "$ locationProvider.hashPrefix (''); ..." क्यों शामिल होना चाहिए?एक ** अच्छा उत्तर ** हमेशा क्या किया गया था इसका एक स्पष्टीकरण होगा और यह ओपी के लिए क्यों नहीं बल्कि भविष्य के आगंतुकों के लिए ऐसा किया गया था। –
आप वर्तमान में नहीं देख सकते हैं .. http://stackoverflow.com/a/12685266/158502 देखें - यदि आप चाहें तो आप इसे इस तरह से हैक कर सकते हैं: http://stackoverflow.com/a/16600968/158502 – Langdon
लेकिन/एन्कोड किया गया है, मैं नेस्टेड घटक नहीं बना रहा हूँ। बस एक घटक - जिसमें% 2F हो सकता है। अगर यह काम नहीं करता है, तो यह एक बग की तरह लगता है, नहीं? – ConfusedNoob
ठीक है, लेकिन यह urlencoded है ... तो जब आप यूआरएल से जुड़े लिंक पर क्लिक करते हैं, तो यह अनएकोड पर जा रहा है। मैंने अभी देखा है कि आप वास्तव में इसे एन्कोड कर सकते हैं, और '$ rout.current.params' में% 2F के साथ समाप्त हो सकते हैं, जिसे आपको स्वयं को डीकोड करना होगा। '% 252F' का प्रयोग करें। – Langdon