标签: angular2-router

Angular4中的ActivatedRoute和ActivatedRouteSnapshot有什么区别

ActivatedRouteSnapshotActivatedRouteAngular 4有什么区别?这是我的理解,ActivatedRouteSnapshot是一个孩子ActivatedRoute,意味着ActivatedRoute包含ActivatedRouteSnapshot.

顺便提一下,我尝试在谷歌搜索中搜索这个问题的答案,但我没有发现任何搜索结果是可以理解的.

谢谢!

angular-routing angular2-router angular

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

如何导航到兄弟路线?

我们假设我得到了这个路由器配置

export const EmployeeRoutes = [
   { path: 'sales', component: SalesComponent },
   { path: 'contacts', component: ContactsComponent }
];
Run Code Online (Sandbox Code Playgroud)

并已导航SalesComponent到此URL

/department/7/employees/45/sales
Run Code Online (Sandbox Code Playgroud)

现在我想去contacts,但因为我没有绝对路线的所有参数(例如7上面例子中的部门ID ),我宁愿使用相对链接到达那里,例如

[routerLink]="['../contacts']"
Run Code Online (Sandbox Code Playgroud)

要么

this.router.navigate('../contacts')
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.可能有一个明显的解决方案,但我没有看到它.有人可以帮帮忙吗?

angular2-routing angular2-router angular

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

我是否必须取消订阅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万
查看次数

Angular2路由器,从url获取路由数据,以显示面包屑

我正在使用angular2路由器.

要绘制网址的面包屑,请说site.com/a/b/c/15我执行以下操作:

  1. 获取路线site.com/a/b/c/15并获得与路线相关联的漂亮名称
  2. 获取路线site.com/a/b/c并获得与路线相关联的漂亮名称
  3. 获取路线site.com/a/b并获得与路线相关联的漂亮名称
  4. 获取路线site.com/a并获得与路线相关联的漂亮名称

所以我想说我有以下路线:

{ path: 'a', component: A, data:{prettyName: 'I am A'}}
{ path: 'b', component: B, data:{prettyName: 'I am B'}},
{ path: 'c', component: C, data:{prettyName: 'I am C'}},
Run Code Online (Sandbox Code Playgroud)

我的过程的结果将是一个包含的数组,{"I am C", "I am B", "I am C"}并且由于我可以显示一个很好的面包屑"I am A > I am B > I am C"来解释当前的路线.

这用于使用路由器弃用的操作

this.router.recognize(url).then((instruction) => {
    instruction.component.routeData.get('prettyName') // Would return 'I am ..'
Run Code Online (Sandbox Code Playgroud)

但是现在; 使用最后一个路由器,我无法再处理这个识别逻辑. …

angular2-routing angular2-router angular

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

获取没有参数的当前路线

我需要在Angular 2中获得没有params的当前路由,我找到了一种方法来获取当前路径的params,如下所示:

 this.router.url
Run Code Online (Sandbox Code Playgroud)

然后分开它:

 this.router.url.split(';')[0]
Run Code Online (Sandbox Code Playgroud)

但这看起来像是解决方法,我认为应该有更好的方法吗?

url angular2-routing angular2-router angular

21
推荐指数
7
解决办法
2万
查看次数

Angular 2:如何异步地有条件地加载路径中的组件?

给定条件的情况下,我想异步地将一个组件附加到路由.

以下示例(可以是异步的)根据用户角色加载一个或另一个组件:

import { UserDashboardComponent }  from './user-dashboard.component'
import { AdminDashboardComponent } from './admin-dashboard.component'

const role = 'admin' // Just for the example
const comp = role === 'admin' ? AdminDashboardComponent : UserDashboardComponent

const routes: Routes = [
  { path: '', component: comp },
]
Run Code Online (Sandbox Code Playgroud)

但是,假设我们想要从API检索角色,从而异步.有什么方法可以实现这一目标?

typescript angular2-router angular

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

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万
查看次数

Angular:将查询参数附加到URL

我用这个:

import { HttpParams } from '@angular/common/http';
let params = new HttpParams();
  params.append('newOrdNum','123');
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我不会在网址中附加param.有什么建议吗?

query-parameters angular2-routing angular2-router angular

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

如何刷新路径的已解析数据

请考虑以下路由配置:

const routes: Routes = [
  {
    path: '',
    component: AppComponent,
    resolve: {
      app: AppResolver
    },
    children: [
      {
        path: 'user/:uid',
        resolve: {
          user: UserResolver
        },
        children: [
          {
            path: '',
            component: ViewUserComponent
          },
          {
            path: 'edit',
            component: EditUserComponent
          }
        ]
      }
    ]
  }
];
Run Code Online (Sandbox Code Playgroud)

用户数据由UserResolver路径的任何子节点检索/user/:uid.使用此数据,可以通过导航到导航到/user/:uid然后编辑来查看用户配置文件/user/:uid/edit.成功编辑后,可能会重定向到用户的更新配置文件(/user/:uid).

但是,视图和编辑页面都是已解析路径的子项,当从一个路径导航到另一个路径时,不会触发解析器.

因此,当从编辑组件导航回视图组件时,显示的数据仍然是旧的,未更新的数据.

是否有办法使已解析的user数据无效以强制解析器再次从服务器获取它?或者有没有其他方法来实现这种结果?

app数据是不变的,我们不应该重新加载它.

typescript angular2-router angular

14
推荐指数
3
解决办法
7413
查看次数

在Angular中,我如何直接导航到延迟加载模块中的路径?

我想有两个顶级路径用于登录和注册.

我宁愿没有做auth/log-inauth/register.

但是,auth组件位于一个单独的模块中,这很好,因为除非特别要求,否则不应加载它.

export const routes: Route[] = [
  { path: 'log-in',   loadChildren: './auth-module/auth.module#AuthModule'},
  { path: 'register', loadChildren: './auth-module/auth.module#AuthModule'}
];
Run Code Online (Sandbox Code Playgroud)

我如何指定何时定义我希望log-in路径转到延迟加载的AuthModule 内部路径的log-in路径,以及转到延迟加载模块内部路径的路径?registerregister

routing angular2-routing angular2-router angular

14
推荐指数
2
解决办法
3694
查看次数