Angularjs - 从when()函数内部获取URL参数

时间:2014-10-15 20:12:44

标签: javascript angularjs angular-routing

给出以下代码:

$routeProvider.when('/movies/:type', {
        title: 'Movies',
        templateUrl: 'pages/movies/movies.html',
        controller: 'MoviesCtrl'
      });

如何从:type函数中访问when参数?我想做这样的事情:

$routeProvider.when('/movies/:type', {
            title: 'Movies' + ' - ' + :type,
            templateUrl: 'pages/movies/movies.html',
            controller: 'MoviesCtrl'
          });

标题中的值必须以动态生成。

先谢谢。

3 个答案:

答案 0 :(得分:4)

我不确定您为什么要扩展route(config)对象,但是您可以从控制器中访问routeParams。这也是推荐的方式。

  

$ routeParams服务允许您检索当前的路由参数集。

angular.module('MyModule').controller('MoviesCtrl',function($scope, $routeParams) {

    $scope.currentMovieType = 'Filmes-' + $routeParams.type;

});

假设您的路线类似于/movies/scifi。在这种情况下,$scope.currentMovieType变为 scifi ,您可以在视图中使用{{currentMovieType}}来填充此值。您可以在documentation中找到详细信息。

请注意,$routeParams仅在路线更改成功完成后更新。这意味着您不能在路由解析功能中依赖$routeParams正确。相反,您可以使用$route.current.params来访问新路线的参数。

答案 1 :(得分:1)

这实际上是不可能的,因为路由配置对象并不像您想象的那样动态。无论您在路由配置对象中放置什么,它都不能取决于路由参数将来要采用的值。想一想这段代码是如何执行的:配置路由时,配置对象只会被评估一次。

另一方面,如果您想在浏览此路线时更改网页标题,可以使用$routeParams服务访问参数值,{{1}用于在控制器或$document子句中更改页面标题的服务。

后一种选择的例子:

resolve

当然,这也适用于控制器。

关于您的代码的一些注意事项:

  • 我甚至不确定路由配置对象中是否有设置$routeProvider.when('/movies/:type', angular.extend({ templateUrl: 'pages/movies/movies.html', controller: 'MoviesCtrl', resolve: { title: ['$routeParams','$document', function ($routeParams, $document) { var title = 'Filmes-' + $routeParams.type; $document.title = title; return title; }] } }, routeParams)); 属性的点,我至少在the documentation中看不到它。
  • title调用中的第二个参数routeParams - 名称令人困惑,可能会将其误认为是angular.extend服务。我认为你应该把它称为$routeParams或类似的东西。

答案 2 :(得分:0)

尝试$ location.absUrl();也需要一些计算。 https://docs.angularjs.org/api/ng/service/ $位置