如何将对url参数的订阅链接到服务中的订阅?

时间:2017-03-10 01:26:07

标签: angular subscription flatmap

我正在尝试创建一个订阅激活路由中的id url参数的组件,然后使用它来调用我的服务,该服务向具有id的服务器发出http请求。

我有一个像这样的ID的路由 - / article / view / 1005

以前,我没有订阅url参数,我只是从网址抓取id。

这是该课程中的代码:

ngOnInit() {
    var id = +this.activatedRoute.snapshot.params["id"];

    if (id) {
        this.articleService.get(id).subscribe(
            article => this.article = article
        );
    }
    else if (id === 0) {
        console.log("id is 0: switching to edit mode...");
        this.router.navigate(["article/edit", 0]);
    }
    else {
        console.log("Invalid id: routing back to home...");
        this.router.navigate([""]);
    }
}

但是,我遇到过这样的情况,即相同的组件可以重复路由,但每次都有不同的ID,而ngOnInit挂钩只是第一次触发。所以我想订阅url参数中的id来解决这个问题。

我尝试找到解决方案,看起来平面图就像我想要使用的那样。但是,我无法找到一个很好的来源,显示如何将订阅链接到这样的网址参数

this.activatedRoute.params.subscribe((params: Params) => {
        id = params['id'];
        console.log(params);
    })

订阅我的文章服务。

1 个答案:

答案 0 :(得分:0)

您可以使用以下路线解析

export const appRoutes: Routes = [
  ...
  { 
    path: 'path1/:id',
    component: YourComponent,
    resolve: {
      someObject: ComponentResolve
    }
  }
];

@Injectable()
export class ComponentResolve implements Resolve<Interface> {

  constructor(private yourService: YourService) {}

  resolve(route: ActivatedRouteSnapshot) {
    return this.yourService.getMethod(route.params['id']);
  }

在你的onInit()中订阅属性为 someObject 的路径数据。