2014-04-09 53 views
9

我正在構建一個angularjs應用程序,我的app.js看起來像這樣。但是,它會拋出Unknown provider: $routeParams錯誤。任何想法爲什麼?如何使用ngRoute在templateUrl中使用URL參數?

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' 
     }); 
    }]); 
+1

$ routeParams是一種服務,而不是一個供應商,你想在你的配置方法中完成什麼?文檔:http://docs.angularjs.org/api/ngRoute/service/$routeParams#! – Brocco

+1

我發現這[鏈接](http://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl),我相信它回答你的問題。 – yccteam

回答

-1

在角度模塊的配置是不允許使用的服務。 $ 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"/> 
0

$routeParams是一種服務,可以不是被注入.config

如果你想設置您templateUrl從網址參數,正確的方法是用一個函數來設置templateUrl(如下):

.when('/Projects/:projectId', { 
    templateUrl: function(params) { // <-- 
     return 'partials/pages/' + params.projectId + '.html'  
    }, 
    controller: 'ProjectDetailController' 
})