使用后退按钮,然后单击 routerLink 导致错误

Using back button and then clicking routerLink results in error

在一个包含 angular 应用程序的 cordova 应用程序中,单击后退按钮后,该应用程序似乎不再位于 "angular zone" 中,因此如果我之后单击任何路由器链接什么都不做并抛出错误 Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()?

已尝试将 "pathMatch: 'full'" 添加到路线。 还尝试了这里的解决方案:Angular 7 routerLink directive warning 'Navigation triggered outside Angular zone' 并且有效,但我宁愿不必在每一页上都写 this.ngZone.run(() => this.router.navigateByUrl(''))。我觉得 routerLink="" 语法更简洁。

我点击的按钮如下所示:

<button type="button" class="btn btn-success  btn-wide" routerLink="/search-by-keyword">

中断的代码如下(注意所有的布尔值都为真)

navigateByUrl(url, extras = { skipLocationChange: false }) {
        if (isDevMode() && this.isNgZoneEnabled && !NgZone.isInAngularZone()) {
            this.console.warn(`Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?`);
        }

如果我只是 运行 它在 Angular 中就可以正常工作。但是当我 运行 包装它的 cordova 应用程序时,它失败了。因为这个错误只发生在 DevMode 中,所以这甚至是我需要担心的事情吗?

提前致谢。

我们遇到了同样的问题,最终在其中一个应用程序的服务中创建了一个 "redirect" 函数,它用 ngZone 包装了导航,然后将我们所有的路由传递到那里:

import { Injectable, NgZone } from '@angular/core';
...
constructor(
    private ngZone: NgZone,
    ...

public redirect(routerArray: any) {
    this.ngZone.run(() => {
        this.router.navigate(routerArray);
    });
}