给出以下代码:
$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'
});
标题中的值必须以动态生成。
先谢谢。
答案 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/ $位置