标签: angular2-router3

如何将参数传递给URL内某处的routerLink?

我知道我可以将参数传递routerLink给路由,例如

/user/:id
Run Code Online (Sandbox Code Playgroud)

通过写作

[routerLink]="['/user', user.id]"
Run Code Online (Sandbox Code Playgroud)

但是这个路线怎么样:

/user/:id/details
Run Code Online (Sandbox Code Playgroud)

有没有办法设置此参数或我应该考虑不同的URL方案?

angular2-routing angular2-router3 angular

182
推荐指数
5
解决办法
15万
查看次数

如何作为模块的子项路由到模块 - Angular 2 RC 5

我正在将正在处理的应用程序升级到最新的Angular 2候选版本.作为这项工作的一部分,我试图使用NgModule规范并将我的应用程序的所有部分迁移到模块.在大多数情况下,除了路由问题之外,这已经非常顺利.

"@angular/common": "2.0.0-rc.5",
"@angular/compiler": "2.0.0-rc.5",
"@angular/core": "2.0.0-rc.5",
"@angular/forms": "0.3.0",
"@angular/http": "2.0.0-rc.5",
"@angular/platform-browser": "2.0.0-rc.5",
"@angular/platform-browser-dynamic": "2.0.0-rc.5",
"@angular/router": "3.0.0-rc.1",
Run Code Online (Sandbox Code Playgroud)

我的应用程序是作为模块的组合构建的,其中几个模块粘合在一起作为父模块的子项.例如,我有一个管理模块,它包含通知模块,用户模块和电话模块(例如).这些模块的路径应该像......

/admin/notifications/my-notifications
/admin/users/new-user
/admin/telephony/whatever
Run Code Online (Sandbox Code Playgroud)

在路由器的早期版本中,使用"children"很容易实现

export const AdminRoutes: RouterConfig = [
   {
      path: "Admin",
      component: AdminComponent,
      Children: [
         ...UserRoutes,
         ...TelephonyRoutes,
         ...NotificationRoutes
      ]
   }
]
Run Code Online (Sandbox Code Playgroud)

在另一个文件中,作为子模块的一部分,我也定义了各个模块路由

export const UserRoutes: RouterConfig = [
    {
       path: "users",
       component: userComponent,
       children: [
           {path: "new-user", component: newUserComponent}
       ]
    }

]
Run Code Online (Sandbox Code Playgroud)

这一切都很有效.在升级到模块的过程中,我将所有内容都移动到了各自的路由文件中,所以现在这两个看起来更像是这样

const AdminRoutes: Routes = [
    {path: "admin", component: AdminComponent}
] 

export const adminRouting = RouterModule.forChild(AdminRoutes)
Run Code Online (Sandbox Code Playgroud)

和 …

angular2-routing angular2-router3 angular2-modules angular

62
推荐指数
3
解决办法
6万
查看次数

我是否必须取消订阅ActivatedRoute(例如params)可观察信息?

我发现许多ActivatedRouteObservables喜欢paramsurl订阅但未取消订阅的例子.

constructor(private route: ActivatedRoute) {}

ngOnInit() {
  this.route.params
    // (+) converts string 'id' to a number
    .switchMap((params: Params) => this.service.getHero(+params['id']))
    .subscribe((hero: Hero) => this.hero = hero);
}
Run Code Online (Sandbox Code Playgroud)
  • 路径对象和订阅是否自动销毁并为每个组件创建新创建?
  • 我是否必须关心取消订阅Observable
  • 如果没有,你能解释一下ActivatedRoute对象树会发生什么Router.routerState

typescript angular2-router angular2-router3 angular

48
推荐指数
3
解决办法
1万
查看次数

无法重新加载/刷新活动路由

我最近更新到新的RC3和Router3alpha,似乎有些事情发生了变化.

我注意到单击活动路径的链接不再导致重新加载组件.如何使用新的router3实现此行为?

我的链接看起来像

<a [routerLink]="['/link1']">Link1</a>
Run Code Online (Sandbox Code Playgroud)

为了测试我只是在ngOnInit中使用了一个随机数:

export class LinkoneComponent implements OnInit 
{

    public foo: number;
    constructor() {}

    ngOnInit() 
    {
        this.foo = Math.floor(Math.random() * 100) + 1;
    }

}
Run Code Online (Sandbox Code Playgroud)

在路由之间切换时它可以正常工作,但是单击当前活动的路由不会导致组件的重新加载.

angular2-routing angular2-router3 angular

27
推荐指数
3
解决办法
3万
查看次数

Angular2路由器:找不到加载'HomeComponent'的主插座

尝试切换到新的路由器,如版本"@ angular/router":"3.0.0-beta.2"与"@ angular/*":"2.0.0-rc.4"组合,遵循官方文档ComponentRouter.

但是,当我尝试使用默认的HomeComponent加载我的应用程序时,我遇到了一个问题:

Cannot find primary outlet to load 'HomeComponent'
Run Code Online (Sandbox Code Playgroud)

这似乎与使用templateUrl和外部html文件而不是使用内联模板样式有关.

HomeComponent最初未显示在Window中,错误将打印到控制台.但是,当我使用Home Component的链接时,它会显示为秒针.

我一改变

templateUrl: 'home.html'
Run Code Online (Sandbox Code Playgroud)

template: '<router-outlet></router-outlet>'
Run Code Online (Sandbox Code Playgroud)

错误消失,HomeComponent显示,路由按预期工作.

这是一个已知问题吗?它对使用templateUrl的人有用吗?为了让它发挥作用,有什么我必须尊重的吗?

angular2-router angular2-router3 angular

18
推荐指数
1
解决办法
2万
查看次数

没有ActivatedRoute的供应商 - Angular 2 RC5

升级到Angular 2 RC5(来自RC4)后,我似乎无法再注入ActivatedRoute我的组件.

原始例外:没有ActivatedRoute的提供商!

这是相关的代码:

import { Component } from '@angular/core';

import { 
  ActivatedRoute
} from '@angular/router';

declare var module: {
  id: string;
};

@Component({
  moduleId: module.id,
  selector: 'mds-app',
  templateUrl: 'app.component.html',
  styleUrls: [
      'app.component.css'
  ],
  directives: []
})
export class AppComponent { 

  constructor(private _route: ActivatedRoute) {
    this._route.params.subscribe(params => console.log(_route));
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的app.module.ts:

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CommonModule }  from '@angular/common';
import { Routes, RouterModule }  from …
Run Code Online (Sandbox Code Playgroud)

angular2-routing angular2-router3 angular

16
推荐指数
3
解决办法
3万
查看次数

想要在Angular 2中路由时阻止组件重新创建

比方说,我们有两个途径DashboardProfile.Dashboard有动态标签功能Google spreadsheet.我想做一些交互(构建图表,可视化一些数据)创建标签Dashboard.现在,如果我路由到Profile然后路由回去Dashboard,我想看看之前在那些标签中的内容Dashboard.这意味着,我想在客户端保持状态.AFAIK在组件之间进行路由时,会重新创建组件.是否可以在使用角度2路由时制作类似应用程序的电子表格?我需要使用路由,因为在我的应用程序中我必须使用LazyLoading功能.

那么这个想法应该是什么?我是角度2的新手.

angular2-routing angular2-router3 angular

12
推荐指数
1
解决办法
6460
查看次数

如何在Angular2 rc3路由中处理来自oauth重定向URL的哈希片段

我正在尝试找到一种方法来处理设置Angular2 Typescript路由(使用3.0.0-alpha.8路由器),该路由将处理以散列片段开头的路由.

我正在处理的应用程序通过带有oauth2的rails后端处理所有外部登录(我无法控制的东西).将用户重定向到外部登录页面工作正常但是当重定向URL时,总是某种形式http://localhost:4200#access_token=TOKEN(其中TOKEN是一系列数字和字母)被发回但我无法弄清楚如何设置可以处理#签署所以我可以抓住它并重定向到适当的组件.

在以前的Angular1应用程序中ui-router,能够使用以下路线:

.state('accessToken', {
  url: '/access_token=:token',
  controller: 'LoginController',
  params: { token: null }
})
Run Code Online (Sandbox Code Playgroud)

并且接受发送回的重定向url没有问题,然后将所有内容传递给LoginController以处理前端的其余身份验证/令牌业务.

然而,这个应用程序是Angular2和Typescript,路由器查询参数似乎不那么灵活,我在实现类似的解决方案时遇到了麻烦.我一直在基于文档中的这一部分,但所有的例子都是建立其他东西,/heroes在进入查询参数的复杂部分之前,例如/heroes/:id.我也搜索了stackoverflow,并且无法找到任何可以使用Angular2和Typescript以及当前路由器的东西.

这是我目前的(非工作)解决方案:

import { provideRouter, RouterConfig } from '@angular/router';

import { HomeComponent } from './components/home/home.component';
import { TestComponent } from './components/test/test.component';


export const appRoutes: RouterConfig = [
  {
    path: '',
    component: HomeComponent,
    terminal: true
  },
  {
    path: 'access_token',
    component: TestComponent
  }
];

export const APP_ROUTER_PROVIDERS = [
  provideRouter(appRoutes)
];
Run Code Online (Sandbox Code Playgroud)

如果我拿回发送回的重定向网址并将其修改(纯粹用于测试目的)http://localhost:4200/access_token=TOKEN …

access-token oauth-2.0 angular2-routing angular2-router3 angular

11
推荐指数
1
解决办法
8537
查看次数

角度2投掷错误:未激活插座

我已经设置了我的应用程序,以便我有一个Recipe Book列表Recipies,当我点击一个食谱然后它显示Recipe Details在嵌套路线中.然后它还有一个按钮,当点击时加载嵌套路线中的成分Recipes Details.

到目前为止,路由似乎有效,除非我尝试导航到另一个Recipe.如果Ingredients托盘(路线)处于活动状态,则它将更改配方并折叠Ingredients路线,如果我然后尝试导航(不打开配料),我会收到以下错误:

Uncaught (in promise): Error: Outlet is not activated
Error: Outlet is not activated
Run Code Online (Sandbox Code Playgroud)

看起来我路由器需要Ingredients处于活动状态,否则它无法理解嵌套路由.这是我的看法,但不知道如何解决它或当我出错.

单食谱书,page.component.html

<app-tray class="recipe-list">
    <app-recipe-list [recipe]="recipe"></app-recipe-list>
</app-tray>
<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)

偏方detail.component.html

<app-tray class="recipe">
    The routing has worked and loaded recipe.
</app-tray>
<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)

配料,list.component.html

<app-tray class="ingredients-list">
    Recipe Ingredients have loaded.
</app-tray>
Run Code Online (Sandbox Code Playgroud)

app.routes.ts(更新)

export const routerConfig : Route[] = [
  {
    path: 'recipe-books',
    children: [
      {
        path: ':id', component: …
Run Code Online (Sandbox Code Playgroud)

angular2-router3 angular

11
推荐指数
1
解决办法
1万
查看次数

Angular2路由:加载两次

我正在使用Angular2进行路由,我的页面在初始加载时显示重复的内容.一旦我点击任何链接(Page1或Page2)一切都很完美(没有更多的重复内容).为什么我在初始加载时获得重复内容,我需要将其显示一次

屏幕截图在此输入图像描述

的index.html

<html>
<head>
    <base href="/">
    <title>Angular QuickStart</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
    <link rel="stylesheet" href="styles.css">
    <!-- 1. Load libraries -->
    <!-- Polyfill(s) for older browsers -->
    <script src="node_modules/core-js/client/shim.min.js"></script>
    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <!-- 2. Configure SystemJS -->
    <script src="systemjs.config.js"></script>
    <script>
      System.import('app').catch(function(err){ console.error(err); });
    </script>
</head>
<!-- 3. Display the application -->
<body>
    <my-app>
        Loading...
    </my-app>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

App.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule …
Run Code Online (Sandbox Code Playgroud)

angular2-router3 angular

9
推荐指数
1
解决办法
6467
查看次数