我在 Angular JS 中有一个“路由”,如下所示
$routeProvider.when('/foos/:fooId', { controller: FooController, templateUrl: 'foo.html'});
它工作得很好,除非 :fooId 组件包含 '/' 或 '%2F'(编码形式)
我怎样才能让它工作,我的“fooId”可以包含/s?
最佳答案
你不能轻易做到这一点,因为如果你使用 %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
关于javascript - Angular JS 'route' 与 %2F 的组件不匹配(编码 '/' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630912/