Angular2中的路由变量

时间:2015-10-06 15:49:24

标签: angular routing

我已经阅读了新Angular路由器的文档。他们用于路由到变量的示例是:

组件/模块:

angular.module('myApp', ['ngFuturisticRouter'])
.controller('AppController', ['$router', function($router) {
  $router.config({ path: '/user/:id' component: 'user' });
  this.user = { name: 'Brian', id: 123 };
});

HTML /模板:

<div ng-controller="AppController as app">
  <a router-link="user({id: app.user.id})">{{app.user.name}}</a>
</div>

这是我的组件:

@RouteConfig([
  { path: '/', component: Home, as: 'home' },
  { path: '/displays/:id', component: DisplayDetails, as: 'display-details' }
])

我的HTML /模板:

<div class="col-md-3" *ng-for="#display of displays">
    <a [router-link]="['/display-details({id: display.id})']"><display-card ></display-card></a>
</div>

我还试过而不是放置组件别名(display-details)我尝试将实际路径和组件放在自己的位置但是它们都给了我同样的错误:

EXCEPTION: Component "App" has no route named "display-details({id: display.id})". in [null]

4 个答案:

答案 0 :(得分:10)

该语法适用于我的情况:

<div class="col-md-3" *ng-for="#display of displays">
    <a [routerLink]="['/display-details', display.id]">
       <display-card ></display-card>
    </a>
</div>

使用此路由器配置:

@RouteConfig([
  { path: '/', component: Home, as: 'home' },
  { path: '/display-details/:id', component: DisplayDetails }
])

答案 1 :(得分:9)

正如@ThreeAccents所建议的

引用文档RouterLink

  

RouterLink期望该值为路由名称数组,后跟该路由级别的参数。例如,['/Team', {teamId: 1}, 'User', {userId: 2}]意味着我们要为Team路由生成带有参数{teamId: 1}的链接,以及带有参数{userId: 2}的子路由用户。

因此,解决方案是将您的routerLink更改为:

<div class="col-md-3" *ng-for="#display of displays">
    <a [routerLink]="['/display-details', {id: display.id}]">
       <display-card ></display-card>
    </a>
</div>

很高兴它对你有用:)

答案 2 :(得分:4)

对于路径:'/ user /:id'

我们可以通过两种方式使用/ user; id:1234或/ user / 123

// For /user;id:1234
[routerLink]="['/user', {id: display.id}]"
// For /user/1234
[routerLink]="['/user', display.id]"

我来到这里的原因是:“ / customers /:id / detail”,最后完成了:

[routerLink]="['/customers', cust.id, 'detail']"

答案 3 :(得分:0)

您可以使用routerLink和queryParams指令在组件中使用函数来获取动态URL和参数。

<div class="col-md-3" *ng-for="#display of displays">
    <a [routerLink]="getURL(display)" 
       [queryParams]="getParams(display)>
       <display-card ></display-card>
    </a>
</div>

在组件中:

getURL(display) { 
    return ['/displays', display.id];
}

getParams(display) { 
    return { param: display.somethingElse }; 
}