9

我正在构建一个 angularjs 应用程序,我的 app.js 看起来像这样。但是,它会引发Unknown provider: $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'
      });
  }]);
4

3 回答 3

0

$routeParams是服务,不能注入.config

如果你想从 URL params 设置你的 templateUrl,正确的方法是使用一个函数来设置templateUrl(如下):

.when('/Projects/:projectId', {
    templateUrl: function(params) { // <-- 
        return 'partials/pages/' + params.projectId + '.html'    
    },
    controller: 'ProjectDetailController'
})
于 2017-04-07T08:14:22.160 回答
-1

在配置级别替换的 AngularJS 1.2 访问路由参数中可用。

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

和:

templateUrl: function(params){ return 'partials/pages/' + params.projectId + 'html'; }

source - AngularJS - 如何使用 $routeParams 生成 templateUrl?

于 2015-07-17T18:22:15.310 回答
-1

在 Angular 模块的配置中不允许使用服务。$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"/>
于 2016-11-30T13:53:43.177 回答