angular routeProvider识别'%2F'但不是' /'在网址中

时间:2016-09-16 03:00:22

标签: angularjs url-routing ngroute

给出以下路线:

        when('/contactus', {
            templateUrl: 'pages/contactus.html'
        }).
        when('/unsubscribe/:email', {
            templateUrl: 'pages/unsubscribe.html'
        }).
        when('/users/validate?key', {
            templateUrl: 'pages/uservalidation.html'
        })

我通过

启动此应用程序后
npm start

在浏览器地址栏中,如果我输入:

localhost/contactus <- GET /contactus 200
localhost/unsubscribe/abc <- GET /unsubscribe/abc 404
localhost/unsubscribe%2Fabc <- GET /unsubscribe%2Fabc 200
localhost/users/validate?key=1 <- GET /users/validate?key=1 404
localhost/users%2Fvalidate?key=1 <- GET /users%2Fvalidate?key=1 404
localhost/users%2Fvalidate%3Fkey%3D1 <- GET /users%2Fvalidate%3Fkey%3D1 404 

所以我的问题是: 1)如何使/ users / validate?key = 1工作? 2)这是不使用url编码的方法吗?通过编码,浏览器会将/unsubscribe%2Fabc转换为预期的/unsubscribe/abc,但刷新页面或自付费并粘贴此网址将无法再次使用,因为它再次使用&#39; /&#39;而不是编码值。

2 个答案:

答案 0 :(得分:0)

 app.config([
'$locationProvider', '$routeProvider',
function ($locationProvider, $routeProvider) {
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    }).hashPrefix('!');
    var viewBase = '/app/views/';
    $routeProvider         
   .when('/admin/home/appliedlist/:userid1/:userid2/:userid3', { // For appliedlist page 
        templateUrl: viewBase + 'EditAppliedList.html',
        controller: 'EditController'
    })
    .otherwise({   // This is when any route not matched => error
        templateUrl: viewBase + 'Error.html'           
    })
}]);

获取网址数据

   app.controller('EditController', ['$scope',  '$routeParams', function   ($scope, $routeParams) {    
    $scope.Type = $routeParams.userid3;
     $scope.Name = $routeParams.userid2;
     $scope.ID = $routeParams.userid1;
}]);

并将数据传递给url

 <a href="/admin/home/appliedlist/12/pravin/employee">Edit</a>

您也可以使用

编码和解码数据
  <a href="/admin/home/appliedlist/12/pravin/{{MyencodingLogic(employee)}}">Edit</a>

将编码代码放入“MyencodingLogic”函数

和解码代码在EditController中使用,您可以通过$ routeParams

获取值

答案 1 :(得分:0)

正是所有其他人都遇到了这个问题:

我所做的解决方案是改变服务器,就像Phil在评论中提到的那样。

我的服务器端是节点,其中包含:

app.get('/:page', callback);

我所做的就是将其更改为:

app.get('/*', callback);

这个解决方案解决了我的两个问题。