我尝试观察窗口的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运算符可以让我在获取实际的调整大小事件之前初始化第一个数字?
答案 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