Angularjs无法使用$ routeParams从URL编码的URL读取参数

时间:2015-01-23 05:37:23

标签: angularjs angular-routing

我已在我的应用中配置了这样的路线:

$routeProvider
    .when('/', {action: 'account_landing_page'})
    .when('/:resource/:id/:extrajson', {action: 'open_resource'})
    .when('/:resource/:id', {action: 'open_resource'})
    .otherwise({redirectTo: '/'})

如果网址包含:extrajson,我希望能够执行不同的操作。所以我有这个网址: xyz/dashboard/1/%7B%22screen_shot_mode%22%3A%20%22on%22%7D

当此URL加载时,它会丢失所有urlencoded额外参数,并变为: xyz/#/dashboard/1

有人可以告诉我,我在这里做错了什么吗? 有人可以解释一下为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

这些参数是URL路径的一部分。所以它会匹配/:resource/:id/:extrajson/foo/bar/baz,其中$ routeParams被解析为:

{
  "resource": "foo",
  "id": "bar",
  "extrajson": "baz"
}

https://docs.angularjs.org/api/ngRoute/service/$routeParams

答案 1 :(得分:0)

以下是一些可能有助于您理解的代码片段。

  when('/search/:someid', {
    templateUrl: 'partials/qviewplaceholder.html',
    controller: 'Myctrl as somectrl'
  }).

注意“:someid”部分。在控制器中向下看会这样。

app.controller('Myctrl', ['$routeParams',function($routeParams) {
this.somedata = $routeParams.someid;
/*controller logic that uses $routeParams.someid for it's logic*/
}]);

您现在有一个模板[partials / qviewplaceholder.html]和一个通过$ routeParams传递给它的变量。 $ routeParams变量通常是一些可用于指向某个对象的id。然后相应地显示数据。此外,这是一个视频演示使用$ routeparams。 https://www.youtube.com/watch?v=ziUelciLL5Q