NgRx 存储运行时检查 NgZone 在 android 上失败
NgRx store runtime check NgZone failing on android
我们实施了网络检查作为 window 事件在线和离线的副作用。
online$ = createEffect(() => {
return fromEvent(window, 'online').pipe(mapTo(NetworkActions.deviceOnline()));
});
这在桌面 Chrome 和 iOS Safari 中工作正常,但不知何故导致 strictActionWithinNgZone
运行时检查 Android:
{
"state": {
"keyboard": {
"isKeyboardOpen": false
},
"network": {
"isDeviceOnline": true
}
},
"error": "Error: Action '[Network] Device Online' running outside NgZone. https://ngrx.io/guide/store/configuration/runtime-checks#strictactionwithinngzone"
},
有没有人知道为什么这只发生在 Android 中,为什么它甚至是一个问题?
编辑:
据我了解,fromEvent(window, '...') 应该始终在区域内,因为 zone.js 会修补所有浏览器 EventTarget。
这也是在 Ionic + Cordova 应用程序上,但仅当构建在 Android 上时。我能看到差异的唯一原因可能是在 Webview 中它是 运行 但除此之外它只是基本的 RxJS 和 Angular
谢谢帕斯卡
看起来这是 Ionic + Cordova 应用程序和 Cordova 网络插件的超级特定问题 https://ionicframework.com/docs/native/network
这似乎干扰了 Android 平台。没有插件,错误不会发生,但在线和离线 window 事件也不会在 Android 上触发。所以我猜这与NgRx无关。
我们实施了网络检查作为 window 事件在线和离线的副作用。
online$ = createEffect(() => {
return fromEvent(window, 'online').pipe(mapTo(NetworkActions.deviceOnline()));
});
这在桌面 Chrome 和 iOS Safari 中工作正常,但不知何故导致 strictActionWithinNgZone
运行时检查 Android:
{
"state": {
"keyboard": {
"isKeyboardOpen": false
},
"network": {
"isDeviceOnline": true
}
},
"error": "Error: Action '[Network] Device Online' running outside NgZone. https://ngrx.io/guide/store/configuration/runtime-checks#strictactionwithinngzone"
},
有没有人知道为什么这只发生在 Android 中,为什么它甚至是一个问题?
编辑: 据我了解,fromEvent(window, '...') 应该始终在区域内,因为 zone.js 会修补所有浏览器 EventTarget。
这也是在 Ionic + Cordova 应用程序上,但仅当构建在 Android 上时。我能看到差异的唯一原因可能是在 Webview 中它是 运行 但除此之外它只是基本的 RxJS 和 Angular
谢谢帕斯卡
看起来这是 Ionic + Cordova 应用程序和 Cordova 网络插件的超级特定问题 https://ionicframework.com/docs/native/network
这似乎干扰了 Android 平台。没有插件,错误不会发生,但在线和离线 window 事件也不会在 Android 上触发。所以我猜这与NgRx无关。