Non è possibile farlo facilmente perché se si utilizza un collegamento con %2F
in esso, il browser lo decodificherà per voi e finirà per essere /
. Attualmente AngularJS non consente di utilizzare /
nei parametri $route
.
È possibile fare doppio codificare, come in questo 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: '/'});
});
E il link potrebbe essere: <a href="#/dir/a%252Fb%252Fc">click here</a>
.
Un'altra opzione, se si dispone di un certo numero di /
caratteri nei parametri può essere trovato qui: How can I make the angular.js route the long path
Al momento non è possibile ... vedere http://stackoverflow.com/a/12685266/158502 - È possibile modificarlo in questo modo, se lo si desidera: http://stackoverflow.com/a/16600968/158502 – Langdon
ma il/è codificato, non sto creando componenti nidificati. Solo un componente, che potrebbe contenere un% 2F. Se questo non funziona, sembra un bug, no? – ConfusedNoob
Giusto, ma è urlencoded ... quindi quando fai clic sul link che è legato all'url, il suo andare a unencode. Ho appena notato che in realtà puoi raddoppiare la codifica e finire con% 2F in '$ route.current.params' che dovrai decodificare da solo. Usa '% 252F'. – Langdon