2014-04-09 14 views
9

Sto costruendo un'app angularjs, la mia app.js ha questo aspetto. Tuttavia, genera l'errore Unknown provider: $routeParams. Qualche idea del perché?Come utilizzare un parametro URL in un templateUrl utilizzando ngRoute?

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 è un servizio e non un fornitore, cosa stai cercando di ottenere con questo nel tuo metodo di configurazione? documentazione: http://docs.angularjs.org/api/ngRoute/service/$routeParams#! – Brocco

+1

Ho trovato questo [collegamento] (http://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl) e credo che risponda alla tua domanda. – yccteam

risposta

-1

Nella configurazione di un modulo angolare non è consentito utilizzare i servizi. $ routeParams è un servizio quindi non puoi utilizzarlo lì.

Si consiglia di includere un modello o un altro tramite il controller ProjectDetailController. In questo controller è possibile iniettare e utilizzare il servizio $ routeParams, per scegliere un modello o un altro. Qualcosa di simile:

Così, il vostro config:

when('/Projects/:projectId', { 
    template: 'partials/pages/main.html', 
    controller: 'ProjectDetailController' 
    }). 

Il controller:

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

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

E il modello main.html:

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

$routeParams è un servizio e può non essere iniettato in .config.

Se si vuole impostare il vostro TemplateURL da URL params, il modo corretto è quello di utilizzare una funzione per impostare il templateUrl (come segue):

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