Javascript 如何使用ngRoute在templateUrl中使用URL参数?

Javascript 如何使用ngRoute在templateUrl中使用URL参数?,javascript,angularjs,url-routing,ngroute,Javascript,Angularjs,Url Routing,Ngroute,我正在构建一个angularjs应用程序,我的app.js看起来像这样。但是,它抛出未知提供程序:$routeParams错误。知道为什么吗 var angularSite = angular.module('angularSite', [ 'ui.router', 'ngRoute', 'siteController', 'siteDirectives' ]) .config(['$routeProvider', '$routeParams', function($rout

我正在构建一个angularjs应用程序,我的app.js看起来像这样。但是,它抛出
未知提供程序:$routeParams
错误。知道为什么吗

var angularSite = angular.module('angularSite', [
  'ui.router',
  'ngRoute',
  'siteController',
  'siteDirectives'
])
.config(['$routeProvider', '$routeParams',
  function($routeProvider,$routeParams) {
    $routeProvider.
      when('/Projects', {
        templateUrl: 'partials/projects.html',
        controller: 'ProjectController'
      }).
      when('/Projects/:projectId', {
        template: 'partials/pages/'+$routeParams.projectId+'.html',
        controller: 'ProjectDetailController'
      }).
      otherwise({
        redirectTo: '/About'
      });
  }]);

AngularJS 1.2访问路由参数在配置级别提供替换

template: 'partials/pages/'+$routeParams.projectId+'.html',
与:


source-

角度模块配置中不允许使用服务$routeParams是一项服务,因此您不能在那里使用它

我建议您通过控制器ProjectDetailController包含一个或另一个模板。 在此控制器中,您可以插入并使用服务$routeParams,以便选择一个或另一个模板。比如:

因此,您的配置:

 when('/Projects/:projectId', {
    template: 'partials/pages/main.html',
    controller: 'ProjectDetailController'
  }).
您的控制器:

Controller.$inject = ['$routeParams'];

/* @ngInject */
function Controller($routeParams) {
  var vm = this;
  vm.template = 'partials/pages/'+$routeParams.projectId+'.html';
}
以及main.html模板:

<ng-include src="vm.template"/>

是一项服务,可以注入
.config

如果要从URL参数设置templateUrl,正确的方法是使用函数设置
templateUrl
(如下所示):

.when('/Projects/:projectId'){

templateUrl:function(params){//$routeParams是一个服务而不是一个提供者,您在配置方法中试图用它实现什么?文档:!我发现了这个,我相信它回答了您的问题。
<ng-include src="vm.template"/>
.when('/Projects/:projectId', {
    templateUrl: function(params) { // <-- 
        return 'partials/pages/' + params.projectId + '.html'    
    },
    controller: 'ProjectDetailController'
})