有route.paramMap.subscribe的时候还有什么理由要用route.snapshot.paramMap吗?

Is there any reason to use route.snapshot.paramMap when there is route.paramMap.subscribe?

不知有没有理由使用

this.someProperty = this.route.snapshot.paramMap.get('someParam');

而不是

this.route.paramMap.subscribe((param) => 
{ 
  this.someProperty = param.get('someParam'); 
});

queryParamMap也是如此。

在我关注的教程中(Deborah Kurata 在 Pluralsight 上)他们似乎默认使用快照,并且仅当您希望参数更改而路由保持不变时才订阅。但是应用程序往往会随着时间而改变。更改可能会导致参数更改而路由保持不变的情况。这种情况很容易被忽视。

那么使用订阅而不是快照应该是(或者是)最佳实践吗?

快照方式写起来更短,但还有其他好处吗?

我可能在这里征求意见,但我想知道是否有官方最佳实践。

提前致谢。

当使用 snapshot 时,您只获得一次值,仅此而已,如果用户更改 url 中的参数,或者使用带有另一个参数的导航到同一路线,则您不会获取新值(除非您每次需要时都在阅读它)

另外 snapshotsync(相对于订阅是异步的)

如果您 subscribe 每次更改值时都可以读取新值。

When you know for certain that a HeroDetailComponent instance will never be re-used, you can use snapshot.

(source: snapshot: the no-observable alternative angular doc )

在快照 paramMap 或可观察的 paramMap 之间进行选择取决于您应用的预期导航场景。只有在某些情况下,组件重用可以通过使用可观察的 paramMap 方式来实现。除此之外,可观察的paramMap(异步订阅)似乎没有带来任何好处。

所以只需阅读快照属性并处理变量,这里不需要处理一个可观察对象。只有在它带来好处时才使用 observables。 details