在可观察到的fromEvent调整大小中添加初始值

时间:2018-08-31 11:53:06

标签: angular typescript rxjs

我尝试观察窗口的innerWidth。

我在调整大小事件中设置了fromEvent个可观察的观看

public get nativeWindow(): Window {
  return window;
}

public getWindowSize(): Observable<number> {
  return fromEvent(this.nativeWindow, 'resize').pipe(
    map(event => (event.target as Window).innerWidth)
  );
}

我希望能够获得window.innerWidth的初始值,因为在实际调整窗口大小之前不会触发调整大小。

我可以使用BehaviorSubject,但是它迫使我订阅fromEvent来继续讨论该主题。

我们尝试在地图之前使用startWith(this.nativeWindow.innerWidth)运算符,但随后地图没有将event参数作为Event而是获取了startWith数字。

是否有任何rxjs运算符可以让我在获取实际的调整大小事件之前初始化第一个数字?

2 个答案:

答案 0 :(得分:4)

因此问题在于,您需要map处理初始值,但同时又需要它与仅由Event事件发出的'resize'对象一起工作。 / p>

最简单的方法是在startWith之后使用map

return fromEvent(this.nativeWindow, 'resize').pipe(
  map(event => (event.target as Window).innerWidth),
  startWith(this.nativeWindow.innerWidth)
);

或者如果不可能(例如,逻辑更复杂),则可以“模拟”对象,以便map像处理其他任何Event对象一样处理它。

return fromEvent(this.nativeWindow, 'resize').pipe(
  startWith({ target: { innerWidth: this.nativeWindow.innerWidth }}),
  map(event => (event.target as Window).innerWidth)
);

答案 1 :(得分:1)

您可以使用Select b.Name, c.Name, sum(a.Revenue) as Revenue, sum(a.Costs) as Costs FROM PaL a JOIN Categories b ON a.category = b.id JOIN Countries c ON a.country = c.id WHERE Event_Date BETWEEN "2017-01-01" AND "2017-12-31" GROUP BY Country, Category 运算符并将初始值传递给可观察对象

startWith