Javascript 如果我的路由提供程序中存在条件

Javascript 如果我的路由提供程序中存在条件,javascript,angularjs,Javascript,Angularjs,在我的$routeProvider中,我有这样的东西 $routeProvider.when('/person/:name/:label', { ... 我想做的是添加一个特殊的案例,如果:name,例如,等于'John',它将帮助我显示一个不同的模板 我试着用这样的方法: $routeProvider.when('/person/:name/:label', { templateUrl: function(param) { if(param=='John') { re

在我的
$routeProvider
中,我有这样的东西

$routeProvider.when('/person/:name/:label', { ...
我想做的是添加一个特殊的案例,如果
:name
,例如,等于'John',它将帮助我显示一个不同的模板

我试着用这样的方法:

$routeProvider.when('/person/:name/:label', {
  templateUrl: function(param) {
    if(param=='John') {
      return 'john.html'; 
    }
     return 'generic.html';
  }, 
  controller: 'PersonCtrl'
});

不过,我一直得到
generic.html
。如何访问name变量并解决此问题?

传递到templateUrl函数的params对象是access,就像$routeParams一样。因此,正如在$routeParams中一样,您需要使用点运算符访问配置的属性。所以在您的例子中,它是
params.name

$routeProvider.when('/person/:name/:label', {
  templateUrl: function(params) {
    return params.name == 'John' ? 'john.html' : 'generic.html';
  },
  controller: 'PersonCtrl'
});

尝试按以下方式添加routeParams
.config(['$routeProvider','$routeParams',函数($routeProvider,$routeParams){
会给我一个
错误:[$injector:unpr]未知提供程序:$routeParams
错误。我看到您在注释后将其标记为正确,一切正常吗?您不需要使用
$routeParams
对象访问
templateUrl
函数中的参数。根据,templateUrl函数将传递一个提供的参数数组,因此您只需要
params.name
。不,我仍然有问题。但这可能与我尝试导入RouteParam的方式有关,因此我的错误,而不是您的错误。@MyKwill您确实是对的,您可以通过这种方式访问各种路由参数。使用
param.name
而不是
param
,您应该很乐意。