我在角JS有一個「路線」與它的偉大工程,除非:fooId組件包含'/'或'%2F'(編碼形式)
如何使這項工作,我的'fooId'可以包含/ s?
我在角JS有一個「路線」與它的偉大工程,除非:fooId組件包含'/'或'%2F'(編碼形式)
如何使這項工作,我的'fooId'可以包含/ s?
你不能輕易做到這一點,因爲如果你在其中使用了一個帶有%2F
的鏈接,瀏覽器將會爲你解碼它,它將最終成爲/
。 AngularJS目前不允許您在$route
params中使用/
。
您可以雙擊編碼它,就像這個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
我必須手動進行雙重編碼和重新編碼: 函數encodeSlash(uri){ \t return uri.replace(/ \ // g,'%252F')。replace(/%2F/gi,'%252F 「); } function decodeSlash(uri){ \t return uri.replace(/%2F/gi,「/」); } 這些都用於寫入$位置或閱讀(例如從$ routeParams),但它很好用,謝謝! – ConfusedNoob
是否有任何方法來解決Angular 2中的問題? – higunjan
基於蘭登的答案,我創建了一個過濾器的所有內容進行了兩次,而另一個用於解碼:
.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}}">
在PR我解碼產品名稱:
<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( ''); 在您的配置。
爲什麼OP「包含$ locationProvider.hashPrefix(''); ...」?一個好的答案**將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,而且是爲了將來SO的訪問者。 –
你目前不能..查看http://stackoverflow.com/a/12685266/158502 - 如果你喜歡,你可以像這樣破解它:http://stackoverflow.com/a/16600968/158502 – Langdon
但是/編碼,我不創建嵌套組件。只有一個組件 - 可能包含%2F。如果這不起作用,它就像是一個錯誤,不是? – ConfusedNoob
沒錯,但它是urlencoded ...所以當你點擊鏈接到url的鏈接時,它會去unncode。我只注意到你實際上可以對它進行雙重編碼,最後在'$ route.current.params'中以%2F結尾,你必須自己解碼。使用'%252F'。 – Langdon