首页 > 解决方案 > 组件实例变量值未在订阅 Angular 7 内更新

问题描述

我正在尝试获取组件的当前和以前的 URL,并根据 URL 更新组件变量。当我调试应用程序时,组件值似乎正在更新,但实际上并非如此。

我的代码的要点如下:

仪表板.component.ts

show = true;
    constructor(private heroService: HeroService, private router: Router) {}
    ngOnInit() {
        this.getHeroes();
        this.router.events
        .pipe(
            filter(evt => evt instanceof NavigationEnd),
            pairwise(),
            take(1)
         )
         .subscribe((events: [NavigationEnd, NavigationEnd]) => {
         console.log("Prev", events[0].url);
         console.log("Cur", events[1].url);
         if (events[1].url === "/dashboard" && events[0].url === "/detail/12") {
             console.log("Came here");
              this.show = false;
         }
     });
}

仪表板.component.html

{{show}}

请找到我的代码的 stackblitz 示例:

https://stackblitz.com/angular/qvvrbgrmmda?file=src%2Fapp%2Fdashboard%2Fdashboard.component.html

重现步骤:通过单击英雄名称导航到任何英雄页面,然后通过单击“返回”按钮返回仪表板组件。在控制台中观察。

注意:imports被忽略,所有import语句都被正确处理

预期结果:更新组件变量后,模板应显示“false”。

实际结果:模板显示“真”而不更新变量,即使条件为真。

我所有的服务都是providedIn: 'root'并且ChangeDetectionStrategyDefault,但我认为这不会影响任何事情。

我试过了changeDetector.detectChanges();changeDetector.markForCheck();ngZone.run();。但似乎没有任何效果。请向我建议,我做错了什么。感谢您提前提供任何帮助。

标签: angular

解决方案


推荐阅读