0

在包装有角度应用程序的科尔多瓦应用程序中,单击后退按钮后,该应用程序似乎不再处于“角度区域”中,所以如果我之后单击任何路由器链接它什么也不做并抛出错误Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()

已尝试将“pathMatch:'full'”添加到路线。还在这里尝试了解决方案:Angular 7 routerLink 指令警告'导航在 Angular 区域外触发'并且它可以工作,但我不想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 中发生,这甚至是我需要担心的事情吗?

提前致谢。

4

1 回答 1

0

我们遇到了同样的问题,最终在应用程序的一个服务中创建了一个“重定向”功能,它使用 ngZone 包装导航,然后将我们所有的路由传递到那里:

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

public redirect(routerArray: any) {
    this.ngZone.run(() => {
        this.router.navigate(routerArray);
    });
}
于 2019-08-25T06:00:49.343 回答