首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular2-router:如何只修改路由的一个参数?

Angular2-router:如何只修改路由的一个参数?
EN

Stack Overflow用户
提问于 2016-10-26 19:09:27
回答 2查看 1.6K关注 0票数 9

我希望在我的应用程序中包含以下路由:

代码语言:javascript
复制
export const routes: Routes = [
    { 
       path: ':universityId', 
       component: UniversityComponent,
       children: [
           { path: 'info', component: UniversityInfoComponent },
           { path: 'courses/:status', component: CoursesByStatusComponent }
       ]
    }
]

/1/info/1/courses/open url上,如何仅从UniversityComponent更改:universityId

简单的router.navigate(['../', 2], {relativeTo: currentRoute })不能这样做,因为它会重定向到/2,丢失所有其他信息。使用'../2/courses/open也不是一种选择--那时我可以在任何子路由上。我能想到的最好的办法是:

代码语言:javascript
复制
const urlTree = this.router.parseUrl(this.router.url);
urlTree.root.children['primary'].segments[0].path = '2';
this.router.navigateByUrl(urlTree);

但这有点丑陋

EN

回答 2

Stack Overflow用户

发布于 2018-08-20 20:30:04

这非常简单。您可以尝试使用this.router.navigate("../2",“课程”,"open",{relativeTo: this.route});

(或)

this.router.navigate("../2",“课程/开放”,{relativeTo: this.route});

这会将您重定向到../2/courses/open。

票数 1
EN

Stack Overflow用户

发布于 2017-07-20 03:12:41

下面是我上面关于使用元组的评论中的一些代码:所以将这个模式复制两次……该shows如何将这些类集成到您的项目中。所以:

对于链接中的代码,请将data-component-resolver.ts更改为parent-child-resolver.ts

  • 将链接中的data-component.ts替换为

下的parent-child.component.ts

parent-child-resolver.ts

代码语言:javascript
复制
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs';
import {Resolve, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';
import {Parent} from '../shared/model/parent';
import {Children} from '../shared/model/children';
import {ParentService} from '../providers/parent.service';

@Injectable()
export class parentChildResolver implements Resolve<[Parent,(Children[])>

  constructor(private parentService : ParentService) {}

  resolve(  route: ActivatedRouteSnapshot,
            state: RouterStateSnapshot
         ) : Observable<[Parent,(Children[])> 
  {
      return this.parentService.findParentById(route.params['id'])
        .switchMap(parent => 
            this.parentService.findChildrenForParent(parent.id),
              (parent, children) => [parent, children]
         );
  }
}

parent-child.component.ts

代码语言:javascript
复制
import {Component, OnInit} from '@angular/core';
import {Parent} from '../shared/model/parent';
import {Children} from '../shared/model/children';
import {Observable} from 'rxjs';
import {ActivatedRoute} from '@angular/router';

@Component({
    selector: 'parent-child',
    templateUrl: './parent-child.component.html'
})

export class ParentChildComponent implements OnInit{
  $parent: Observable<Parent>;
  $children: Observable<Children[]>;

  constructor(private route:ActivatedRoute) {}

  ngOnInit() {
    this.parent$ = this.route.data.map(data => data['key'][0]); //from router.config.ts
    this.children$ = this.route.data.map(data => data['key'][1]);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40260738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档