【问题标题】:Using back button and then clicking routerLink results in error使用后退按钮,然后单击 routerLink 会导致错误
【发布时间】:2019-07-25 09:27:08
【问题描述】:

在包装有角度应用程序的科尔多瓦应用程序中,单击后退按钮后,该应用程序似乎不再处于“角度区域”中,因此如果我之后单击任何路由器链接,它什么也不做并抛出错误@ 987654322@?

已尝试将“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 中?

提前致谢。

【问题讨论】:

    标签: angular cordova angular-routerlink ngzone


    【解决方案1】:

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

    import { Injectable, NgZone } from '@angular/core';
    ...
    constructor(
        private ngZone: NgZone,
        ...
    
    public redirect(routerArray: any) {
        this.ngZone.run(() => {
            this.router.navigate(routerArray);
        });
    }
    

    【讨论】:

    猜你喜欢
    • 2014-06-10
    • 2021-06-29
    • 2022-10-24
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多