0

我必须提供两种类型的网址:/:culture/:author,其中都有一级网址参数。虽然文化是一组预定义的参数,如enes,en-us,br,fr,it等,作者可以是来自db的任何用户名(文化名称除外)。所以我想让参数在一组文化中发送给HomeCtrl的路由,如果不是,它会发送给AuthorCtrl。我能做什么?如何设置角度路由参数的接受值?

.when('/:culture/', { 
    templateUrl:'partials/home/home', 
    controller:'vvHomeCtrl' 
}); 

回答

1

您可以定义templateUrl和控制器的功能,使这样的路线:

.when('/:cultureOrAuthor/', { 
    templateUrl: function(params) { 
     // AVAILABLE_CULTURES is your predefined array 
     if(AVAILABLE_CULTURES.indexOf(params['cultureOrAuthor'])!==-1) { 
      return 'urlForCultures'; 
     } else { 
      return 'urlForAuthors'; 
     } 
    }, 
    controller: function($scope, $routeParams) { 
     if(AVAILABLE_CULTURES.indexOf($routeParams['cultureOrAuthor'])!==-1) { 
      // first logic 
     } else { 
      // second logic 
     } 
    } 
}); 

这是一个简单的控制器一个很好的解决方案。否则,请考虑使用来自路由器的解决方案(docs)。

+0

谢谢它适合我。 –

1

我同意@Mates解决方案,通过检查文化参数是否有效。但是,我可能会尝试使用redirectTo属性来分隔两条路线。

.when('/:culture/', { 
    templateUrl:'partials/home/home', 
    controller:'vvHomeCtrl', 
    redirectTo:function(routeParams, path, search) { 
     if(cultures.indexOf(routeParams.culture)!==-1) { 
      //return path(string) to author route 
     } 
     return path; 
    } 
}) 
.when(/* Author route definition */);