【问题标题】:Angular 2 rc4 with 3.0 router: how to get all route information efficiently带有 3.0 路由器的 Angular 2 rc4:如何有效地获取所有路由信息
【发布时间】:2016-11-08 06:32:24
【问题描述】:

我在 Angular 2 rc4 上使用路由器 3.0.0-beta.1。 我想知道如何获取当前路线上的多个数据部分。 我需要参数、数据和 URL。

所有这三个部分都通过 observables 暴露在路由上。 我想出了这个凌乱的代码,我想知道这是否可以更有效地完成:

@Component({
    ...
})
@Injectable()
export class MyComponent implements OnInit {

    constructor(private route:ActivatedRoute) {
    }

    ngOnInit() {
        this.urlSub = this.route.url.subscribe(url=> {
            this.dataSub = this.route.data.subscribe(data=> {
                this.paramsSub = this.route.params.subscribe(params=> {

                    ... logic using all 3 variables: params, data, url

                });
            });
        });
    }
}

谢谢

【问题讨论】:

  • 为什么这么乱?
  • 它需要大量的锅炉电镀。我没有添加所有内容:例如 urlSub、dataSub 和 paramsSub 订阅的声明。以及 ngOnDestroy 方法中的取消订阅。
  • 是的,但您只能在共享组件/服务中执行此操作一次

标签: angular router


【解决方案1】:

看来你要找的是 zipArray。这将等到每个 observable 都有一个值。

(从文档中提取) zipArray 接受可变数量的 Observables 作为参数并返回一个发出数组的 Observable,每个数组包含来自每个源 Observable 的第 n 个项目。

示例代码

var range = Rx.Observable.range(0, 5);

var source = Rx.Observable.zipArray(
  range,
  range.skip(1), 
  range.skip(2)
);

var subscription = source.subscribe(
  function (x) {
    console.log('Next: ' + x);
  },
  function (err) {
      console.log('Error: ' + err);   
  },
  function () {
      console.log('Completed');   
  });

 Next: [0,1,2]
 Next: [1,2,3]
 Next: [2,3,4]
 Completed

【讨论】:

  • 感谢您的示例。不过,如果您在示例中应用了路线数据,那就太好了 ;-) 我可以在“已完成”部分获取所有相关数据,还是我需要使用“下一个”部分?您可以将实际链接添加到您所指的文档吗?
  • 我把那个小练习和任何 Google 搜索留给热心的读者 =)
猜你喜欢
  • 2017-03-04
  • 2016-07-07
  • 2021-10-14
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
相关资源
最近更新 更多