gpt4 book ai didi

javascript - Angular 2,ngOnChanges,ngDoCheck

转载 作者:行者123 更新时间:2023-11-30 15:34:22 24 4
gpt4 key购买 nike

大家好,我带着很多想法来找你们,我想谈谈我无法得到的东西。

简单的服务研究

所以我们这里有一个由组件触发的服务。

这是一个简单的服务,当它被触发时提交一个可观察的元素:

return this.subject.asObservable();

然后我们有一个组件获取这个:

this.alertService.getMessage().subscribe(message => { this.message = message; });

好的,到目前为止一切正常。这个逻辑包含在一个组件中,他的选择器名称是<alert></alert>

嵌套组件

这里我们有另一个组件 <alert></alert> .

<div class="article-page-container">
<alert></alert>
<ul *ngIf="!alert" class="page-nav-container">
<li *ngFor="let page of pageArray" (click)="pageHandlerEvent(page)" [ngClass]="{ 'page-active': page == pageActive}">{{ page }}</li>
</ul>
</div>

你明白了吗?我想要做的是,当嵌套组件收到警报时,它应该关闭页面导航类。

我找到了一个解决方案,这不是如何让它发挥作用的问题,而是找到正确的解决方案,做出让人们引以为豪的东西?

ngDoCheck

我还需要多说吗?这很丑陋,我得到了 1000000000 个无用的支票,但它会起作用。

ngDoChanges

应该只在我的组件内部发生“变化”时才发生,对吗?

所以我尝试了这个:

<div class="article-page-container">
<alert (alertOn)="toggleNav($event)"></alert>
<ul *ngIf="!alert" class="page-nav-container">
<li *ngFor="let page of pageArray" (click)="pageHandlerEvent(page)" [ngClass]="{ 'page-active': page == pageActive}">{{ page }}</li>
</ul>
</div>

每次触发警报时,我都会执行一个简单的 this.alertOn.emit(true) ,

但是 ngOnChanges 根本不起作用。这将导致:

core.umd.js:3493 ORIGINAL EXCEPTION: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'.

其他测试

  • 我已尝试将此服务直接包含到容器中(相同问题)

  • 我已将警报移出组件,使用带有
    的输入ngOnChanges 工作(另一种解决方案,但看起来更像我正在避免我的问题不仅仅是找到解决方案)

我知道你们很棒,所以如果你们知道应该以“正确的方式”做什么。

祝你有美好的一天!

最佳答案

你试过移动

this.alertService.getMessage().subscribe(message => { this.message = message; });

订阅你的父容器,然后通过发送消息作为输入

<alert [message]=message></alert>

这样你还可以在订阅函数中包含一些逻辑来更改页面导航容器的显示标志 bool 值

关于javascript - Angular 2,ngOnChanges,ngDoCheck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com