配置中的Angular别名路由没有重定向

时间:2014-05-09 08:47:07

标签: angularjs route-provider

我可能只是错过了一些简单的东西,但我想为我的路线添加别名。我试图让路由/ hello_world转发到/ posttemplate的现有路由。我希望能够为这些路由设置别名,以便为用户提供易于记忆的方式来获取动态链接...就像博客中的永久链接一样。另外,这是一个单独的问题,有没有人知道在json文件或xml中定义所有这些路由的角度的好方法或者在我添加许多路由时保持这个清洁的东西?

application.config(['$routeProvider', '$locationProvider',  function AppConfig($routeProvider, $locationProvider, $routeParams) {


 $locationProvider.html5Mode(true).hashPrefix('!');

$routeProvider.when("/dashboard", {
    controller: 'controllers.DashboardController',
    templateUrl: 'templates/dashboard.html'

}).when("/wishlist", {
    controller: 'controllers.WishlistController',
    templateUrl: 'templates/wishlist.html'
}).when("/login", {
    controller: 'controllers.LoginController',
    templateUrl: 'templates/login.html'
}).when("/posttemplate", {
    controller: 'controllers.PostTemplateController',
    templateUrl: 'templates/posttemplate.html'
}).when("/hello_world", {
    controller: 'DynamicRouteController',
    templateUrl: function(params){ return '/posttemplate?id=1' }
}).otherwise({
    controller: 'controllers.HomeController',
    templateUrl: 'templates/home.html'

});


}]);

4 个答案:

答案 0 :(得分:2)

我认为您应该首先仔细规划您的网址格式。让/{{post_name}}/posttemplate处于同一级别似乎不是一个好主意。

也许您可以尝试为所有单篇文章添加路径前缀,例如/post/:post_name。 然后你可以将它添加到你的路由器配置:

.when("/post/:post_name", {
    controller: 'DynamicRouteController',
    templateUrl: 'templates/posttemplate.html'
}

然后在DynamicRouteController中,从post_name阅读$routeParams并将其映射到您的帖子ID。您可以在帖子中添加类似unique_name字段的内容,其中存储您希望从中访问的URL(/ post / post_name)。

或者,如果你真的想要,你也可以把它们放在同一水平。只要确保"全能" item位于路由器配置的末尾。

而且,如果你愿意,你绝对可以将路由器配置保存到JSON文件中。只需迭代一系列配置项并将它们传递给when()

答案 1 :(得分:1)

您可以使用redirectTo重定向"别名"到其他路线。

.when("/hello_world", {
    redirectTo: '/posttemplate'
}

有关详细信息,请参阅$routeProvider上的文档。

答案 2 :(得分:1)

嗯......这就是我最终做的......如果有人知道更好的方式......请告诉我。

routes["/dashboard"] =  { 

     controller: 'controllers.DashboardController', 
     templateUrl: 'templates/dashboard.html', 
     aliases: ['/dash','/dasher'],
     meta: {
       title: "Dashboard",
       description: 'This is my description'
     }

 };

routes["/bucket"] =  {    
             controller: 'controllers.PostTemplateController',  
             templateUrl: 'templates/posttemplate.html', 
             aliases: [],
             arguments: {
                   id: 1
               },
             meta: {
               title: "Dashboard",
               description: 'This is my description'
               }


 };

//Incontroller
     if (!postId)
        postId = $route.current.arguments.id;

答案 3 :(得分:0)

查看此项目ui-router。它提供了多种功能来增强您的路线和模板管理。