angular - 组件实例变量值未在订阅 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'
并且ChangeDetectionStrategy
是Default
,但我认为这不会影响任何事情。
我试过了changeDetector.detectChanges();
,changeDetector.markForCheck();
和ngZone.run();
。但似乎没有任何效果。请向我建议,我做错了什么。感谢您提前提供任何帮助。
解决方案
推荐阅读
- assembly - MIPS 从内部循环中删除 +one?
- r - 我试图将重复行的所有数据移动到单行中
- android - Android Kotlin 测试:确保 firebase 实时数据库数据创建在仪器测试之前同步运行
- beagleboneblack - beaglebone black adc "in_voltageX_raw': 资源暂时不可用"
- javascript - (Discord.js) 使用 discord-buttons npm 包,如何禁用按钮?
- python - 当 run_eagerly = False 时,在 train_step() 中评估 Tensorflow 张量
- typescript - Nest 无法解析 JokesService (?) 的依赖关系
- next.js - getStaticPaths 空数组和回退的缺点是真的吗?
- pdf - Adobe PDF Embed API 将内容保存到 Base64
- azure-durable-functions - 使用 Azure Durable Function 时消耗计划超时