Angular: ExpressionChangedAfterItHasBeenCheckedError: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ измСнилось послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° ng 4

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 16 июн. 2017  Β·  201ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: angular/angular

Π― ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽ ...


[ ] Regression (behavior that used to work and stopped working in a new release)
[X ] Bug report #14748 
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅


ПослС использования наблюдаСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΌΠΎΠ΅ΠΌ шаблонС с использованиСм async я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ:
ERROR Ошибка: ExpressionChangedAfterItHasBeenCheckedError: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ''. Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: 'Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ'

ОТидаСмоС повСдСниС

РасскаТитС, поТалуйста, ΠΎ вашСй срСдС

<br i="15"/>
Angular version: 4.2.2

<p i="16">Browser:</p>

<ul i="17">
<li i="18">[X] Chrome (desktop) version Version 58.0.3029.110 (64-bit)</li>
</ul>

<p i="19">For Tooling issues:</p>

<ul i="20">
<li i="21">Node version: v6.10.3</li>
<li i="22">Platform: Mac</li>
</ul>
core regression bufix

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° послС обновлСния с 4.1.3 Π΄ΠΎ 4.2.3. ИспользованиС setTimeout устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ΠΈΠ·:

PanictUtil.getRequestObservable (). Subscribe (data => this.requesting = data);

ΠΊΠΎΠΌΡƒ:

PanictUtil.getRequestObservable (). Subscribe (data => setTimeout (() => this.requesting = data, 0));

ВсС 201 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘Ρ‹Π»Π° такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с использованиСм redux. Π’ΠΎΡ‚ ссылка Π½Π° выпуск, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я размСстил Π² ΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Когда Π½Π° angular 2 ошибок Π½Π΅Ρ‚, Π½ΠΎ Π½Π° angular 4.2.2 я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ выраТСния послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ ошибки.
https://github.com/angular-redux/store/issues/428

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρƒ мСня Π½Π° ΠΌΠΎΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ с 4.1.3 Π½Π° 4.2.x. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ 4.1.3 Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ для мСня, Π½ΠΎ я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ это навсСгда.

Π― ΠΌΠΎΠ³ Π±Ρ‹ воспроизвСсти Π½Π° минимальном ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, я всС Π΅Ρ‰Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эту (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) Ρ€Π΅Π³Ρ€Π΅ΡΡΠΈΡŽ. Но ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π² dev. Ρ€Π΅ΠΆΠΈΠΌ с 4.2.Ρ…. Но Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ это Π½Π΅ совсСм ясно. Π›ΡŽΠ±Ρ‹Π΅ Ρ‡Π°Π΅Π²Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ.

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° послС обновлСния с 4.1.3 Π΄ΠΎ 4.2.3. ИспользованиС setTimeout устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ΠΈΠ·:

PanictUtil.getRequestObservable (). Subscribe (data => this.requesting = data);

ΠΊΠΎΠΌΡƒ:

PanictUtil.getRequestObservable (). Subscribe (data => setTimeout (() => this.requesting = data, 0));

@jingglang, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ воспроизвСсти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° http://plnkr.co/edit/tpl : AvJOMERrnz94ekVua0u5 с минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ?

Π£ мСня Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° - ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ с 2.4 Π΄ΠΎ 4.2, ΠΈ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠ΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ скрытия / отобраТСния Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π­Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° Π² стилС Π°ΠΊΠΊΠΎΡ€Π΄Π΅ΠΎΠ½Π°, Π³Π΄Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ зависит ΠΎΡ‚ сравнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ с Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, какая панСль Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ (срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ). ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ @select для получСния наблюдаСмого ΠΈ связан с | async Π² шаблонС - Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΊΠ°ΠΊ ΡˆΠ°Ρ€ΠΌ Π² вСрсии 2.4, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ ExpressionChangedAfterItHasBeenCheckedError, ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ Π½Π΅ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ.

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ с 4.1.3 Π΄ΠΎ 4.2.2.

Но я нашСл ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ.
Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ChangeDetectionRef ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ detectionChanges() Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ ошибки.

constructor(private cdr: ChangeDetectionRef) {
}

onChange(): void {
  this.val += 1; // <- get error after
  this.cdr.detectionChanges();
}

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ измСнСния, внСсСнного Π² 4.2.

https://github.com/angular/angular/pull/16592

Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: https://github.com/angular/angular/issues/14321

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρƒ вас ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π³Π° ng-content ?

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ„ΠΎΡ€ΠΌΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π³Π° ng-content которая Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ContentChangedAfter.

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ с 4.1.3 Π΄ΠΎ 4.2.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅

ΠŸΡ€ΠΈΠ»Π°Π³Π°ΡŽ нСбольшой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ ошибки

app-error.zip

ПослС этого я ΠΏΠΎΠ½ΠΈΠ·ΠΈΠ» Π²Π΅Ρ€ΡΠΈΡŽ Π΄ΠΎ 4.1.3 (ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅), ΠΈ ошибка исчСзла, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π½ΠΈ Π±Ρ‹Π», ΠΎΠ½ спСцифичСн для 4.2. Π£ мСня Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ plunkr Π½Π° этой Π½Π΅Π΄Π΅Π»Π΅ (ΠΈΠ»ΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ), Π½ΠΎ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, это связано с ΠΎΠ΄Π½ΠΈΠΌ дСйствиСм, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰ΠΈΠΌ Π΄Π²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… влияСт Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс. Одно ΠΈΠ· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса происходит, Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π₯ΠΌΠΌΠΌ,
ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ Π΄ΠΎ вСрсии 4.1.3 Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ примСняСт Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ @jingglang.

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ @tytskyi. Π― сдСлал plunkr http://plnkr.co/edit/XAxNoV5UcEJOvsAbeLHT для этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. надСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ @jingglang, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ (для мСня) Π½Π° 4.2.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅
Π˜Π›Π˜ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎ события Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ элСмСнта Π² Π΅Π³ΠΎ конструктор большС Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ

@umens Π’Ρ‹ обновляСтС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±Ρ‹Π» ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½, поэтому Π²Ρ‹ Π½Π΅ сохраняСтС ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…

@alexzuza, ΠΊΠ°ΠΊ я ΠΌΠΎΠ³Ρƒ этого Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ? Π― всСгда Π΄Π΅Π»Π°Π» это Π±Π΅Π· ошибок. ΠŸΠΎΡ‡Π΅ΠΌΡƒ установка SetTimout большС Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ошибки. (Π― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» plunkr) Π― сомнСваюсь, Ρ‡Ρ‚ΠΎ это ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ @umens, спасибо Π·Π° @alexzuza : Π²Ρ‹ обновляСтС ΠΏΠΎΠ»Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ. Π’Π°Ρˆ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ эквивалСнтСн этому: http://plnkr.co/edit/ksOdACtXScZKw3VRAYTm?p=preview (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я ΡƒΠ΄Π°Π»ΠΈΠ» слуТбу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄).
ΠŸΠΎΡ‡Π΅ΠΌΡƒ это сработало? ВСроятно, случайно здСсь Π±Ρ‹Π»Π° ошибка Π² старой вСрсии angular ΠΈΠ»ΠΈ Rxjs. ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅, поТалуйста, ΠΊΠ°ΠΊΠΈΠ΅ вСрсии использовались? Или Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€?

ΠŸΠΎΡ‡Π΅ΠΌΡƒ установка SetTimout большС Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ошибки.

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ мСняСтС ΠΏΠΎΠ»Π΅ асинхронно, Ρ‡Ρ‚ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ односторонний ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим это с ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ стороны: ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка? ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ΄Π΅Ρ‚ свСрху Π²Π½ΠΈΠ·. Он провСряСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ app.toolsConfig привязанноС ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ <child-cmp> ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ синхронно обновляСт app.toolsConfig . Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ запускаСт Π²Ρ‚ΠΎΡ€ΡƒΡŽ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ) ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ состояниС прилоТСния ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ. Но app.toolsConfig Π΄ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π½Π΅ Ρ€Π°Π²Π½ΠΎ app.toolsConfig послС. ВсС это происходит Π·Π° ΠΎΠ΄ΠΈΠ½ Β«Ρ…ΠΎΠ΄Β», Β«Ρ†ΠΈΠΊΠ»Β» обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ. спасибо Π·Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚. Π― Π½Π΅ ΠΌΠΎΠ³ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° происходит ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.
для ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ "Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ" вСрсии я использовал:
@ angular / *: 4.1.1 (ΠΊΡ€ΠΎΠΌΠ΅ compiler-cli -> 4.1.0)
rxjs: 5.3.1

@umens здСсь воспроизводится ошибка со старыми вСрсиями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ упомянули: http://plnkr.co/edit/kfoKmigXzFXwOGb2wyT1?p=preview. Он Π²Ρ‹Π΄Π°Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, вСроятно, Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ повлияла какая-Ρ‚ΠΎ сторонняя Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ нСполная инструкция воспроизвСдСния?

Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ.
Π²ΠΎΡ‚ ΠΌΠΎΠΉ yarn.lock, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΉΡ‚ΠΈ дальшС: https://pastebin.com/msARLta1
Π½ΠΎ я Π½Π΅ знаю Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ

Π― Π²ΠΈΠΆΡƒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ошибки Β«ExpressionChanged ...Β» послС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с 4.1.2 Π½Π° 4.2.3 .

Π’ ΠΌΠΎΠ΅ΠΌ случаС Ρƒ мСня Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· слуТбу. Услуга прСдоставляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠΉ основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈ ComponentA создаСтся Π΄ΠΎ ComponentB .

Π’ 4.1.2 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π±Π΅Π· ошибок:

Π¨Π°Π±Π»ΠΎΠ½ ComponentA:

<ul *ngIf="myService.showList">
...

ComponentB Класс:

ngOnInit() {
  this.myService.showList = false; //starts as true in the service
  ...
}

Π’ 4.2.3 ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ шаблон ComponentA ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибки Β«ExpressionChanged ...Β»:

Π¨Π°Π±Π»ΠΎΠ½ ComponentA:

<ul [hidden]="!myService.showList">
...

Π― всС Π΅Ρ‰Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ стало ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с *ngIf Π½Π° [hidden] Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ Ρ‡Π°Ρ‰Π΅ всСго это происходит, ΠΊΠΎΠ³Π΄Π° я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ‚Π°ΠΊΠΎΠΉ асинхронный ΠΊΠ°Π½Π°Π»:
<div>{{ (obs$ |async).someProperty }}</div>
Если я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ это Ρ‚Π°ΠΊ:

<div *ngIf="obs$ | async as o">
  <div>{{ o.someProperty }}</div>
</div>

Π—Π°Ρ‚Π΅ΠΌ ошибка исчСзаСт, поэтому я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди сдСлали ΠΎΡˆΠΈΠ±ΠΊΡƒ, которая Π½Π΅ Π±Ρ‹Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° Ρ€Π°Π½ΡŒΡˆΠ΅: я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ошибка появилась Π² 4.2 ...

Вакая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρƒ мСня. ΠŸΠΎΡ…ΠΎΠΆΠ΅, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° исходит ΠΎΡ‚ @ angular / router

Π― Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ это связано с Ρ€ΠΎΡƒΡ‚Π΅Ρ€ΠΎΠΌ. ΠŸΡ‹Ρ‚Π°Π»ΡΡ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ Π²Ρ‡Π΅Ρ€Π°, Π½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ публикация Π½Π΅ ΡƒΠ΄Π°Π»Π°ΡΡŒ. Π― исслСдовал дальшС ΠΈ упростил ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, смогу Π»ΠΈ я ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ источником дСйствия являСтся Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ ΠΏΠ°Π½Π΅Π»ΠΈ, Π½ΠΎ Π΄Π°Π΅Ρ‚ сбой с ошибкой ExpressionChanged ΠΏΡ€ΠΈ запускС Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ.

<span class="glyphicon pull-right" [ngClass]="{'glyphicon-chevron-up' : (ui$ | async)?.visiblePanels[VisiblePanel.IngredientTypes], 'glyphicon-chevron-down' : !((ui$ | async)?.visiblePanels[VisiblePanel.IngredientTypes])}"></span>

Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ΠΌΠ½Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ! Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта.

Как ΠΈ @acidghost , я ΠΌΠΎΠ³ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, запустив ChangeDetectorRef#detectChanges Π² AfterViewInit ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΏΡ€ΠΎ plunkr, я Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΆΠ°Π»ΠΎΠ±Ρ‹ Π½Π° gitter, ΠΈ это всСгда ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

НС ΠΌΠΎΠ³Ρƒ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Π±Ρ‹Π»Π° Π»ΠΈ ошибка Π²Π²Π΅Π΄Π΅Π½Π° Π² вСрсии 4.2 ΠΈΠ»ΠΈ скорСС Π² отсутствии ошибки Π² вСрсии <4.2, ΠΈ ΠΎΠ½Π° Π±Ρ‹Π»Π° устранСна Π² вСрсии 4.2.

Ошибка: ExpressionChangedAfterItHasBeenCheckedError
Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:
componentRef.changeDetectorRef.detectChanges ();

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° (динамичСски сгСнСрированныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹):
componentRef = viewContainerRef.createComponent (componentFactory); // ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ создан
(componentRef.instance) .data = input_data; // Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ измСняСм Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° здСсь
componentRef.changeDetectorRef.detectChanges (); // это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Для простых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² просто ΠΏΠΎΠ³ΡƒΠ³Π»ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ "componentRef", Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅
componentRef.changeDetectorRef.detectChanges ();
послС установки / измСнСния Π΄Π°Π½Π½Ρ‹Ρ… / ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

РСшСниС 2:
Π― снова ΠΏΠΎΠ»ΡƒΡ‡Π°Π» эту ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Β«this.dialog.open (DialogComponent)Β».
поэтому Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ этого ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ setTimeout () ΠΊ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.
ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
openDialog () {
let dialogRef = this.dialog.open (DialogComponent);
}
ngOnInit (): void {
setTimeout (() => this.openDialog (), 0);
}
Ρ…ΠΎΡ‚ΡŒ Π²Ρ€ΠΎΠ΄Π΅ Ρ…Π°ΠΊ .. Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ !!!

Начиная с вСрсии 4.2 Ρƒ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ Ρƒ мСня Π½Π΅ сработало Π½ΠΈ ΠΎΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ :( Π― создаю ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ динамичСски с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ngAfterViewInit. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ, которая ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π΅ @Input() . Π― ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽ это Π² ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ строку. ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ @Input() Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° прСдставлСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅ Π±Ρ‹Π»ΠΎ построСно ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ статичСской строкой.

https://plnkr.co/edit/E7wBQXm8CVnYypuUrPZd?p=info

staticComponent.ts

export class StaticComponent implements AfterViewInit {
  @ViewChild('dynamicContent', {read: ViewContainerRef})
  dynamicContent: ViewContainerRef;

  constructor(private componentFactoryResolver: ComponentFactoryResolver) {}

  ngAfterViewInit(): void {
    const componentFactory: ComponentFactory<DynamicComponent> = this.componentFactoryResolver.resolveComponentFactory(DynamicComponent);
    this.dynamicContent.createComponent(componentFactory);
  }
}

test.directive.ts

@Directive({
  selector: '[testDirective]'
})
export class TestDirective {
  @Input()
  testDirective: string;
}

dynamic.component.ts

@Component({
  selector: 'dynamic-component',
  template: `<div [testDirective]="'test'">XXX</div>`
})
export class DynamicComponent {
}

ERROR Ошибка: ExpressionChangedAfterItHasBeenCheckedError: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: undefined. Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: «тСст». ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ прСдставлСниС Π±Ρ‹Π»ΠΎ создано послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт ΠΈ Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹. Π‘Ρ‹Π» Π»ΠΈ ΠΎΠ½ создан Π² Π»ΠΎΠ²ΡƒΡˆΠΊΠ΅ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ?

Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ смущСн, читая эту Π²Π΅Ρ‚ΠΊΡƒ. Π­Ρ‚ΠΎ извСстная ошибка, которая Π±ΡƒΠ΄Π΅Ρ‚ устранСна Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ выпускС? Или это ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅? Если Π΄Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅? Бпасибо.

НС знаю, связано это ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π½ΠΎ я страстно Π½Π΅Π½Π°Π²ΠΈΠΆΡƒ это сообщСниС! это проявляСтся Π’ΠžΠ›Π¬ΠšΠž ΠΏΡ€ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌ тСстировании с Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ 'ng test'. Полагаю, я ΠΌΠΎΠ³ просто Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ простой сСрвис. Π’Π°ΠΊΠΆΠ΅ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π» этого Π² тСстировании, Π½Π΅ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ, связанного с тСстами. Π― Π±ΡƒΠ΄Ρƒ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° этой Ρ‚Π΅ΠΌΠΎΠΉ ΠΈ Π»ΡŽΠ±Ρ‹ΠΌΠΈ поисковыми запросами ExpressionChangedAfterItHasBeenCheckedError + unit testing.

Π― пытался ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ plnkr ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ слоТно воспроизвСсти ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±ΡˆΠΈΡ€Π½Π°Ρ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°, я Π΄ΡƒΠΌΠ°ΡŽ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΠ»Π° мСня ΠΊ пониманию Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π½Π΅ Ρ‚Π°ΠΊ (хотя Π½Π΅ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ, являСтся Π»ΠΈ это ошибкой, ΠΈΠ»ΠΈ ошибка с ΠΌΠΎΠ΅ΠΉ стороны).

Π― создал нСбольшой ΠΎΠ±Ρ€Π°Π·Π΅Ρ† прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΡ€Π΅Π·Π°Π½Π½Ρ‹Π΅ вСрсии Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Ρ‡Ρ‚ΠΎ ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, с послСдним routerReducer. К ΠΌΠΎΠ΅ΠΌΡƒ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½ΠΈΡŽ, ошибки Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π˜Ρ‚Π°ΠΊ, я установил Ρ‚ΠΎΡ‡ΠΊΠΈ останова ΠΈ наблюдал Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ дСйствий Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€Ρ‹. Π― ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π΄Π²Π° прилоТСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ дСйствия Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.

Мой Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса управляСт Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ являСтся источником измСнСния состояния, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ΠΎΡ‚ урСзанная вСрсия Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€Π° с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ дСйствиями:


export const userInterfaceReducer = (state = INITIAL_UI(), action: any) => {
    switch (action.type) {
        case IngredientActions.LIST_INGREDIENTS:
            if (action.hideTypes) {
                return Object.assign(state, { visiblePanel: VisiblePanel.Ingredients });
            }
            return state;
        default:
            return state;
    }
}

Когда я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ это Π² своСм нСбольшом тСстовом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ - сначала срабатываСт дСйствиС LIST_INGREDIENTS ΠΈ возвращаСтся Π½ΠΎΠ²ΠΎΠ΅ состояниС; Π·Π°Ρ‚Π΅ΠΌ срабатываСт дСйствиС @ angular-redux / router :: UPDATE_LOCATION, ΠΈ примСняСтся рСгистр ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎ ΠΆΠ΅ состояниС.

Когда я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ Π΅Π³ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, порядок ΠΈΠ»ΠΈ дСйствия ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ. Π‘Π½Π°Ρ‡Π°Π»Π° срабатываСт дСйствиС @ angular-redux / router :: UPDATE_LOCATION, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ староС состояниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π—Π°Ρ‚Π΅ΠΌ срабатываСт LIST_INGREDIENTS, возвращая Π½ΠΎΠ²ΠΎΠ΅ (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅) состояниС - ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

Π― ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для мысли, Ρ‡Ρ‚ΠΎ я сдСлал Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π³Π»ΡƒΠΏΠΎΠ΅, ΠΈ это Π½Π΅ настоящая ошибка, Π½ΠΎ Ссли Π΄Π°, Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ я сдСлал?

(Π’ качСствС сноски, я ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» Π²Π΅Ρ€ΡΠΈΡŽ 4.1.3 ... ΠΈ ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ запускаСт Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ redux Π² `` ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ '' порядкС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ мСстополоТСния срабатываСт послС дСйствия списка ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, поэтому ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ вСрсия 4.2 Π½Π΅Ρ‚).

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ такая ΠΆΠ΅ досадная ошибка, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ измСняСт свойство слуТбы. РСшСно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ * ngIf Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ошибка

смог ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ngDoCheck () ΠΈ Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ChangeDetectorRef.detectChanges.

public ngDoCheck(): void {
    this.cdr.detectChanges();
}

@pappacurds НС Π΄Π΅Π»Π°ΠΉ этого. Π­Ρ‚ΠΈΠΌ Π²Ρ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

здСсь ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ такая ΠΆΠ΅ ошибка https://plnkr.co/edit/IeHrTX0qil17JK3P4GBb?p=preview

ошибка: previous undefined after undefiend

послС обновлСния такая ΠΆΠ΅ ошибка

МнС Ρ‚ΠΎ ΠΆΠ΅

Π’ 4.0.0 всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, послС обновлСния Π΄ΠΎ 4.2.6 ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ВсС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± ошибкС ExpressionChangedAfterItHasBeenCheckedError ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ эта ошибка, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ исправлСния.

исправлСния ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ структуры Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ пСрСписываниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для Β«ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈΒ» Π½ΠΎΠ²ΠΎΠ³ΠΎ второстСпСнного обновлСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. JS всС Π΅Ρ‰Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ старыС ошибки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ...

Вакая ТС ошибка здСсь

Π― Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠΆΡƒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² ~4.2.4 . ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ~4.1.3 Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ContentChildren , Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ использовании ChangeDetectorRef detectChanges() Π² ΠΊΠΎΠ½Ρ†Π΅ AfterViewInit родитСля (Π³Π΄Π΅ ΠΎΠ½ вносил измСнСния). Как Π½ΠΈ странно, эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Π° Π½Π΅ с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ. Π― ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π» Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² 4.2.4, Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с шаблоном <ng-content></ng-content> Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ Π½Π°Ρ‡Π°Π» Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ExpressionChangedAfterItHasBeenCheckedError .

Π― ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» это ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ Π²Π²ΠΎΠ΄Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° 2. ΠŸΡ‹Ρ‚Π°Π»ΡΡ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого

ngAfterViewInit(): void {
this.numberFormControl.setValue(200);
}

Π― собрал простой Plunker, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ случай, ΠΊΠΎΠ³Π΄Π° ошибки ExpressionChangedAfterItHasBeenCheckedError Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ начиная с Angular 4.2.x .

Π― создал простой ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния ContentChild Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ использовании ChangeDetectorRef detectChanges() Π² ngAfterViewInit Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ: Ρ‚Π°ΠΊΠΆΠ΅ создан простой ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€ Π½Π° основС ΠΌΠΎΠ΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π½ΠΎ с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ вмСсто ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ Π±Π΅Π· ошибок.

@saverett Π― Π²ΠΈΠΆΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС с вашим ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚ΠΎΠΌ

@JSMike Π£ мСня Π±Ρ‹Π» Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ случай, ΠΊΠ°ΠΊ ΠΈ Π² вашСм ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€Π΅ (обошСл Π΅Π³ΠΎ, ΠΎΠ±Π΅Ρ€Π½ΡƒΠ² ΠΊΠΎΠ΄, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° ContentChild Π² setTimeout , ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€ )

@JSMike Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠŸΠΎΡ…ΠΎΠΆΠ΅, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с angular / zone.js # 832. Π― установил Π²Π΅Ρ€ΡΠΈΡŽ zone.js Π½Π° 0.8.12, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ исправят послСднюю Π²Π΅Ρ€ΡΠΈΡŽ zone.js. Plunker Π΄ΠΎΠ»ΠΆΠ΅Π½ снова Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

@matkokvesic - это Π½Π΅ совсСм Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, это просто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ происходит Π²Π½Π΅ Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ошибки ΠΏΡ€ΠΈ использовании Angular v4.1.3.

@JSMike Π― согласСн, это Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ИспользованиС элСмСнтов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСтся ContentChildren Π² ngAfterViewInit ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π΄ΠΎ Angular 4.2.6.

Я создал Plunker для ошибки, описанной в https://github.com/angular/angular/issues/17572#issuecomment -311589290

https://plnkr.co/edit/E7wBQXm8CVnYypuUrPZd?p=info

Π― исправил это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ changeDetection: ChangeDetectionStrategy.OnPush ΠΈ this.changeDetector.markForCheck(); Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅

@touqeershafi, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ this.changeDetector.markForCheck(); , Ρ€Π°Π·Π²Π΅ это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Π΅Ρ‰ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ?

Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ происходит. Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ошибка, Π° Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈ Π΅Π΅ слСдуСт ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

@istiti, я понимаю, Ρ‡Ρ‚ΠΎ это Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этой ошибки. Но Ρ‡Ρ‚ΠΎ касаСтся ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, я ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» TODO с URL-адрСсом ошибки.

Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ происходит. Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ошибка, Π° Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈ Π΅Π΅ слСдуСт ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с @rwngallego ... ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ 4.2.x я ΡƒΠΆΠ΅ написал нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ использования / ng-content, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ @ViewChildren , @ContentChildren ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ

МнС постоянно приходится Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ экзСмпляр ChangeDetectorRef Π²ΠΎ всС эти конструкторы (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ классы, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠ΅ эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹), ΠΈ это Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ динамичСский ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ @saverett (ΠΏΡ€ΠΈ использовании ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ динамичСский ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚), я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡƒΠΊΠ°Π·Π°Π½Π° здСсь https://github.com/angular/angular/issues/15634.

Для всСх, ΠΊΡ‚ΠΎ вносит измСнСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ngAfterViewInit / ngAfterViewChecked я Π΄ΡƒΠΌΠ°ΡŽ, это ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ.

Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… (здСсь Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π») для мСня это Π·Π°Π³Π°Π΄ΠΊΠ°.

Для мСня это происходит ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ.
Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π”ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставит Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт, Π½ΠΎ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° обСщания Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ конструкторС. Π’Π°ΠΊ:

Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ

constructor {
dataservice.getData().then((result) => {
this.source = result;
});
}

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ шаблон

<app-child [source]="source"></app-child>

Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

@Input() source:any[];

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π΅ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:

constructor(private cdRef: ChangeDetectorRef) {
dataservice.getData().then((result) => {
this.source = result;
 this.cdRef.detectChanges();
});
    }

Π­Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ для ошибки, ΠΈ ΠΊΠ°ΠΊΠΎΠ²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ послСдствия Ρ‚Π°ΠΊΠΎΠ³ΠΎ измСнСния? ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Angular ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, я Π΄ΡƒΠΌΠ°ΡŽ, Π²Π°ΠΌ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ, поэтому ...

@sulhome ... ваша ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ конструкторС мСняСт @Input Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ... Π²ΠΎ врСмя Ρ†ΠΈΠΊΠ»Π° CD ΠΈ Π΅Π³ΠΎ подтвСрТдСния Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ этом ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ошибки.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° this.cdRef.detectChanges(); добавляСт Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» CD, поэтому ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ послС Π½Π΅Π³ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ ΠΈ => Π±Π΅Π· ошибок.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ конструкции ΠΈ ΠΎΠ±Ρ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΊΠΎΠ΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ± этом Π² ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌ объяснСнии здСсь: https://hackernoon.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4

@ mlc-mlapis, Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ я всС дСлаю ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, добавляя this.cdRef.detectChanges(); ΠΈ Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… послСдствий?
Π― ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ, ΡΠ»ΡƒΡˆΠ°Ρ ngOnChanges Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ элСмСнтС, я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ngOnChanges ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для

@sulhome Π”Π°, this.cdRef.detectChanges(); - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚, Π½ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ 2 ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска ... Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ всС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π³Π΄Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ OnPush для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ» CD.

Если Π²Π΅Ρ€Π½ΠΎ, Ρ‡Ρ‚ΠΎ dataservice.getData ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с использованиСм http, Ρ‚ΠΎ, вСроятно, самым простым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² этой слуТбС ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π³ΠΎ ΠΈΠ· Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΏΠΎΡ‚ΠΎΠΊ, Ρ€Π΅Π±Π΅Π½ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° Π½ΠΈΡ… ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

@ghetolay для записи, Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° это ошибка, см. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ # 18129, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΎΡ‚ΠΊΡ€Ρ‹Π».

Π£ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @Output.

Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ home.ts

drag_second(trigger){ console.log("dragged222222"+trigger); if(trigger){ this.isactive=true; }else{ this.isactive=false; } }
ΠΈ home.html
<div class="upper" [ngClass]="{'isactive':isactive}">

isactive мСняСтся ΠΏΡ€ΠΈ dragstart ΠΈ dragend ....

сообщСниС ΠΎΠ± ошибкС
ExpressionChangedAfterItHasBeenCheckedError: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ измСнилось послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: «истина». Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: false.

ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ / Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ класса?

Π’Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² 4.2.x ΠΈ 4.3.0, Π½ΠΎ Π½Π΅ Π² 4.1.x.

Ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ng-template .

РСшСниС: ΠŸΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ всСго ΠΊΠΎΠ΄Π° ΠΈΠ· ngAfterViewInit Π² setTimeout Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ для мСня (спасибо @jingglang).

public ngAfterViewInit(): void {
    setTimeout(() => {
        //my code
    });
}

@Wernerson , взглянитС Π½Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ JSMike ΠΎ setTimeout. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π²Ρ‹ просто мСняСтС ΠΊΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

Моя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я использовал ActivatedRoute params Observable для измСнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ состояния Π² ngOnInit() . ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Router испускаСт params синхрон, поэтому ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ происходит Π²ΠΎ врСмя CD.
МоС простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² настоящСС врСмя:

  // !!! see delay(0)
  // results are consumed by async Pipe, where I also had the CD issue (null vs. undefined)
  this.results = this._activatedRoute.params.delay(0)
    .do(params => this.searchParameters = this._createSearchParameters(params))
    .switchMap(p => {
      let key = this.searchParameters.key();
      return this._searchResultCache.results.map(r => r.get(key));
    });

(Π― знаю, Ρ‡Ρ‚ΠΎ это Π½Π΅ самый красивый Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ / Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° свСтС;))
Π˜Ρ‚Π°ΠΊ, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ delay(0) Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π° ΠΎΠ΄ΠΈΠ½ tick .

НадСюсь, я смогу ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.
Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ Π»ΡŽΠ±Ρ‹Π΅ опасСния, насколько ΠΌΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ опасноС.

Каков статус этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π² Angular 4.2.6.
Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² производствСнных сборках? ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сборках.

Π― Π½Π΅Π½Π°Π²ΠΈΠΆΡƒ всС ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ с Ρ€ΡƒΡ‡Π½Ρ‹ΠΌ запуском обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ запуском Π΅Π³ΠΎ Π² setTimeout () ...

setTimeout() нСэффСктивСн, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ всСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ detectChanges() провСряСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ AFAIK.

Π£ ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ngOnInit, Π° Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ говорят

ngOnInit() : Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ / ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Angular сначала ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ свойства с привязкой ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ свойства Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ / ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ВызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ngOnChanges ().

ΠœΡ‹ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ Π½Π° наши сСрвисы (ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ состояниС прилоТСния) с ngOnInit . Наши подписки - это синхронныС BehaviorSubjects; ΠΎΠ½ΠΈ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π²ΠΎ врСмя подписки. Π˜Ρ‚Π°ΠΊ, «послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Angular сначала ... устанавливаСт свойства Π²Π²ΠΎΠ΄Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ / ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Β», ΠΌΡ‹ сразу ΠΆΠ΅ мСняли значСния. Π’ΠΎΡ‚ ΠΎΡ‡Π΅Π½ΡŒ простой Plunker, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· Tour Of Heroes Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ асинхронный http, поэтому ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚. Π”ΡƒΠΌΠ°ΡŽ, Π² этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ наша ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ подписываСмся Π½Π° наши синхронныС состояния ΠΈΠ· нашСго конструктора, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ значСния Π½Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ установлСны Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ участники этого ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠ², ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ значСния ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΠ»ΠΈ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ angular ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ появлСниС ошибки, Π½ΠΎ, вСроятно, Π² этом Π½Π΅Ρ‚ нСобходимости.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ, @maximusk : всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± ошибкС ExpressionChangedAfterItHasBeenCheckedError .

По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, эта Π²Π΅Ρ‚ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° привСсти ΠΊ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΎΠ±ΠΎ всСм этом Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΏΠΎ angular.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ, @maximusk : ВсС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± ошибкС ExpressionChangedAfterItHasBeenCheckedError.

Бпасибо

@adamdport

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ это Π² случаС использования @ContentChildren для измСнСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… свойств Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ частично эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° являСтся ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠΉ ошибкой, Π° Π½Π΅ ошибкой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:
https://github.com/angular/angular/issues/15634

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ адрСсовал ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ использованиС *ngIf .

* ΡΠΌΠΎΡ‚Ρ€ΡŽ ...

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Angular Material, Π° Π·Π°Ρ‚Π΅ΠΌ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΡ… Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π° Π½Π΅ выполняСтС this.myDataInput = Object.assign({}, dialogDataInput) . Π’.Π΅. this.myDataInput = dialogDataInput; Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ this.myDataInput.isDefault = !this.myDataInput.isDefault; . Как объяснялось Π²Ρ‹ΡˆΠ΅, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Π΄ΠΈΠ°Π»ΠΎΠ³) измСняСт значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² прСдставлСнии Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° [Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚]

ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Π΅Ρ‚ навСрняка, намСрСнная это ошибка ΠΈΠ»ΠΈ Π±Π°Π³?
ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ngOnInit? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, Ссли я ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽ ΠΊΠΎΠ΄ Π² конструктор (Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· Observable), ошибка Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ...

@ ВСрнСрсон . Π£ вас Π² html Π΅ΡΡ‚ΡŒ * ngIf? Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ngOnInit , solong, всС Π²Π½ΡƒΡ‚Ρ€ΠΈ * ngIf Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ этой ошибкС.

Π•Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ сообщСниС ΠΎΠ± ошибкС появляСтся ΠΏΡ€ΠΈ использовании "ngIf" ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… элСмСнтов управлСния. Π’Π°ΠΉΠΌ-Π°ΡƒΡ‚, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

@ j-nord, Ссли Π±Ρ‹ Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π²Ρ‹ Π±Ρ‹ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ timeout Π½Π΅ трСбуСтся.

@ j-nord / @dgroh Π― испытал Ρ‚ΠΎ ΠΆΠ΅ самоС. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ng-hint, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ ngIf, ΠΈ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этой ошибки. Удалось Π»ΠΈ Π²Π°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ?

@Wernerson Π΄Π°, Ρ‡Π°ΡΡ‚ΡŒ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ ошибкой ΠΈΠ»ΠΈ Π±Π°Π³ΠΎΠΌ: https://github.com/angular/angular/issues/15634

@ mawo87 Ρƒ мСня Ρ€Π°Π±ΠΎΡ‚Π°Π» со скрытым, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ удаляСт элСмСнт ΠΈΠ· DOM. Для нашСго трСбования это Π±Ρ‹Π»ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ чистым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

@ mawo87
Π‘Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π² сообщСнии ΠΎΠ± ошибкС. @Angular Team : Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π±Ρ‹ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Ρ‹Π»ΠΎ Π² сообщСнии ΠΎΠ± ошибкС. Π­Ρ‚ΠΎ нСпросто Π½Π°ΠΉΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… масок ΠΈ Webpack. Если Π²Ρ‹ нашли ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ это происходит, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС:

this.cdr.detectionChanges();

Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с vermilion928 ΠΎΡ‚ 19 июня.

Бпасибо @dgroh и @ j-nord.
@ j-nord Π― Ρ‚Π°ΠΊΠΆΠ΅ смотрСл Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ detectChanges, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»ΠΈ:
https://hackernoon.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4

Π’ ΠΌΠΎΠ΅ΠΌ случаС я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ слуТбу PageTitle ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡΡŒ Π½Π° Π½Π΅Π΅ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² прСдставлСниС, ΠΎΠ½ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ PageTitle Π² слуТбС, Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· подписку. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π±Π΅Π· ошибок Π² 4.1.x, Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ ΠΎΡˆΠΈΠ±ΠΊΡƒ ExpressionChangedAfterItHasBeenCheckedError Π² 4.2x ΠΈ Π½ΠΎΠ²Π΅Π΅.

ВсС ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠ°ΠΊ оТидалось, ΠΈ ошибки Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… / производствСнных сборках (ΠΈΠ·-Π·Π° отсутствия Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ), Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π² ΠΌΠΎΠ΅ΠΉ консоли ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ красного Ρ†Π²Π΅Ρ‚Π°.

МнС Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΊΡ€Π°ΠΉΠ½Π΅ нСясно, ΠΊΠ°ΠΊΠΎΠ΅ (Π΄Π°ΠΆΠ΅ краткосрочноС) исправлСниС. Мои подписки Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ находятся Π² конструкторС, Π° обновлСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· слуТбу находятся Π² ngOnInit.

Π― ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» сообщСниС «всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ ...Β», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, Π½ΠΎ Π½Π΅ заставляСт мСня ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ дСлаю Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΈ Π½Π΅ Π΄Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

@alignsoft, Ссли Π±Ρ‹ Π²Ρ‹ установили Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… Π² ngOnInit, я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ошибка Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π° ... Π‘ΠΌ. ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±Ρ‹Π»Π° ссылка Ρ€Π°Π½Π΅Π΅.

@alignsoft Π― согласСн, Π²ΠΎΠΊΡ€ΡƒΠ³ этой ошибки Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ дискуссий, Π½ΠΎ Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‡Π΅Ρ‚ΠΊΠΈΡ… инструкций ΠΎ Ρ‚ΠΎΠΌ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π° ΠΎΠ½Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚ ... это большС Β«ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Β» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎ стандартах ΠΈ ​​привязкС / манипуляции Π΄Π°Π½Π½Ρ‹ΠΌΠΈ?

Π’ ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС я имСю Π΄Π΅Π»ΠΎ с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ / Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ @ViewChild ΠΈ @ContentChild , ΠΈ приходится снова ΠΈ снова Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ detectChanges (), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ошибка Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»Π°ΡΡŒ Π² консоли ...

@rolandoldengarm Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ конструкторС ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ значСния Π² AfterViewInit Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ сообщСниС ΠΎΠ± ошибкС. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этим Π½Π° основС Ρ†ΠΈΠΊΠ»Π° обнаруТСния ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈ ошибка ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ являСтся ошибкой?

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ здСсь ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ...

Глядя Π½Π° это снова. ΠŸΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΌΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· https://github.com/angular/angular/issues/17572#issuecomment -315096085
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AfterContentInit вмСсто AfterViewInit ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ContentChildren Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Π’ΠΎΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ plnkr с AfterContentInit ΠΈ Π±Π΅Π· ошибок: http://plnkr.co/edit/rkjTmqclHmqmpuwlD0Y9?p=preview

@JSMike Π― ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» AfterViewInit Π½Π° AfterContentInit , всС Ρ‚Π° ΠΆΠ΅ ошибка. Π”Π°ΠΆΠ΅ Ссли я обновляю свои Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ OnInit Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка. Насколько я знаю, это соотвСтствуСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ Angular (Π²Π΅Ρ€Π½ΠΎ?) Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ врСмя OnInit . ВмСстС с Ρ‚Π΅ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этой ошибки Π½Π΅ Π±Ρ‹Π»ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… вСрсиях, я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ это ошибка. Однако я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ заявлСниС ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ссли это Ρ‚Π°ΠΊ ..? : D

@Wernerson, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ngOnInit Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ доступны Π² этом Ρ…ΡƒΠΊΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ свою Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ngAfterContentInit Ссли ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ элСмСнтам содСрТимого.

@JSMike НС ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ, ошибка всС Π΅Ρ‰Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚. Π― просто ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡΡŒ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ послС получСния Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (асинхронно) Π² ngAfterContentInit .

@Wernerson Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ plnkr?

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с StackBlitz
Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ событиС, Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ обновляСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.
ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² консоли js:
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'undefined'. Current value: 'hello world'.

Π’Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ngAfterContentInit Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты статичны, ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ создании Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов с использованиСм *ngFor http://plnkr.co/edit/rkjTmqclHmqmpuwlD0Y9?p=preview

@soldiertt Π²Π°ΠΌ просто Π½ΡƒΠΆΠ΅Π½ detectChanges () https://stackblitz.com/edit/angular-qfu74y

@JSMike, Ссли я это сдСлаю, ngAfterViewInit Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅ запускаСтся: https://stackblitz.com/edit/angular-bdwmgf

@soldiertt, Ρ‡Ρ‚ΠΎ каТСтся странным, Π½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ.

@JSMike Моя установка довольно слоТна со слуТбами, сторонними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ Ρ‚. Π”. И Ρ‚. Π”. К соТалСнию, я Π½Π΅ смог воспроизвСсти ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€Π΅: /

Π£ мСня сработало Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ChangeDetectorRef!

Π£ мСня Π΅ΡΡ‚ΡŒ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² карусСли, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ свойство Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ элСмСнта карусСли, свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ извСстно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС вычислСния Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ карусСли. И всС элСмСнты проходят Ρ‡Π΅Ρ€Π΅Π· ng-content , поэтому я ΠΌΠΎΠ³Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с элСмСнтами Π² ngAfterContentInit Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° карусСли. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:
ΠΊΠ°Ρ€ΡƒΡΠ΅Π»ΡŒ:

@ContentChildren(ItemComponent) carouselItems;

ngAfterContentInit() {
  // ... some computations
  this.carouselItems.forEach((item: ItemComponent, currentIndex) => {
    item.setPropertyX(someComputedValue);
    // OR:
    item.x = someComputedValue; // of course, this would work as well
  });
}

Π²Π΅Ρ‰ΡŒ:

setPropertyX(value) {
  this.x = value;
}

Помимо Π²Π·Π»ΠΎΠΌΠ° setTimeout() , Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ СдинствСнноС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слуТбу ΠΈ Ρ‚Π΅ΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ элСмСнты взаимодСйствовали с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΊΠ°Ρ€ΡƒΡΠ΅Π»ΡŒΡŽ? Π― имСю Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ смСшно ... Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ссли Ρƒ мСня Π±ΡƒΠ΄Π΅Ρ‚ 100 элСмСнтов Π² карусСли, Ρ‚ΠΎ Ρƒ мСня Π±ΡƒΠ΄Π΅Ρ‚ 100 подписок. И это удваиваСтся, Ссли Ρƒ мСня Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ карусСли. НСуТСли это Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ способ ?! ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ?

Π§Π°Ρ‰Π΅ всСго Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства для Π½Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ извСстны Π΄ΠΎ AfterContentInit ... И Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях (ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± 1 ΠΈΠ»ΠΈ 2 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ это, Π° скорСС 50 ΠΈΠ»ΠΈ 100, ΠΊΠ°ΠΊ Π² карусСли) ΠΈΠΌΠ΅Ρ‚ΡŒ дСсятыС ΠΈΠ»ΠΈ сотни подписок Π±Ρ‹Π»ΠΎ Π±Ρ‹ смСшно.

Π•ΡΡ‚ΡŒ Π»ΠΈ какая-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ крутая Ρ‡Π°ΡΡ‚ΡŒ Angular, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½Π΅ здСсь ΠΏΠΎΠΌΠΎΡ‡ΡŒ, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»?

PS Π― Ρ‚Π°ΠΊΠΆΠ΅ попытался ввСсти ChangeDetectorRef ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ detach() ΠΊΠ°ΠΊ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° карусСли, Ρ‚Π°ΠΊ ΠΈ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° элСмСнта. Π― ΠΎΠΆΠΈΠ΄Π°Π», Ρ‡Ρ‚ΠΎ это исправит ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ, Π½Ρƒ ... Π― Π² основном Π³ΠΎΠ²ΠΎΡ€ΡŽ: "_screw ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΌΠ½Π΅ это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, поТалуйста: Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ НИКАКИΠ₯ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ _" ... Π½ΠΎ ошибка всС Ρ€Π°Π²Π½ΠΎ выдаСтся! Π˜Ρ‚Π°ΠΊ, Π² Ρ‡Π΅ΠΌ смысл ΠΌΠ΅Ρ‚ΠΎΠ΄Π° detach() , Ссли ΠΎΠ½ Π½Π΅ выполняСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚?

constructor(private cdr: ChangeDetectorRef) {
  this.cdr.detach();
}

setTimeout() Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ для Π²Π·Π»ΠΎΠΌΠ°, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π° просмотр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ привязок шаблона Π²ΠΎ врСмя ngAfterViewInit .

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ магию, Π΄Π°ΠΆΠ΅ Π½Π΅ зная ΠΏΠΎΡ‡Π΅ΠΌΡƒ. Но Π΅ΡΡ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ допустимый сцСнарий, ΠΊΠΎΠ³Π΄Π° использованиС setTimeout() являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ способом.

@ghetolay Π Π°Π·Π²Π΅ Π½Π΅ Π²Π·Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (ΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ систСма обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ? Π― пошСл ΠΏΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρƒ ChangeDetectorRef.detectChanges (), Π½ΠΎ это Π΄Π°ΠΆΠ΅ каТСтся ΠΌΠ½Π΅ Π²Π·Π»ΠΎΠΌΠΎΠΌ ... Ссли любоС ΠΈΠ· этих Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Β«ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΒ», я полагаю, Π½Π°ΠΌ придСтся с этим ΠΆΠΈΡ‚ΡŒ, Π½ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΎΠΌΠ°Π΅Ρ‚ любой использованиС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ViewChild (ren) ΠΈΠ»ΠΈ ContentChild (ren)

@fugwenna

Π Π°Π·Π²Π΅ Π½Π΅ Π²Π·Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (ΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ систСма обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ?

Π― Π½Π΅ понимаю этого вопроса. Π²Ρ‹Ρ€Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°?

Angular Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» CD ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° происходит асинхронноС событиС (событиС dom, xhr, setTimeout ΠΈ Ρ‚. Π”.), Π’ΠΎ врСмя этого CD ΠΎΠ½ обновляСт прСдставлСниС. ngAfterViewInit hook запускаСтся послС этого, поэтому большС Π½Π΅ планируСтся Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ CD, ΠΈ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ снова, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ асинхронноС событиС. ИспользованиС setTimeout() - самый простой способ снова Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Π’Ρ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π³ΠΎΠ΄Π° Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°.

@ghetolay Π― @JSMike ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠΉ Ρ‚Π΅ΠΌ:

@matkokvesic - это Π½Π΅ совсСм Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, это просто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ происходит Π²Π½Π΅ Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ошибки ΠΏΡ€ΠΈ использовании Angular v4.1.3.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ использованиС setTimeout () ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠ²ΡƒΡˆΠΊΠ° ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ Β«ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°Β» ΠΈΠ»ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ?

@ghetolay @fugwenna ΠΊΠ°ΠΊ насчСт ΠΌΠ΅Ρ‚ΠΎΠ΄Π° detach() ΠΈΠ· ChangeDetectorRef ? Π•ΡΡ‚ΡŒ прСдполоТСния? Π Π°Π·Π²Π΅ это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Ρ‚Π΅ΠΌ самым ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ? НС понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Или ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ "нСзависимо" ΠΎΡ‚ этого? Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Angular Π½Π΅ заботится ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΅Π³ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ свойство послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ установлСно?
Если люди всС Π΅Ρ‰Π΅ спорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Β«ExpressionChangedAfterItHasBeenCheckedΒ» являСтся ошибкой ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ошибка ... На ΠΌΠΎΠΉ взгляд, Angular большС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ мСняли свойства послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ установлСны, Ссли ΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ОсобСнно Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ я это сдСлал, для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π² основном Π²ΠΎ всСм Π΄Π΅Ρ€Π΅Π²Π΅.

Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ потСрялся здСсь, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΌΠΎΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ Π±Ρ‹ я ΠΌΠΎΠ³ Π΄Π°ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‡Π΅Π½ΡŒ распространСнныС Π²Π΅Ρ‰ΠΈ, Π½Π΅ вызывая ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

НапримСр, я написал ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ срСдства доступа ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ инкапсулируСт Π΄Π°Ρ‚ΠΏΠΈΠΊΠ΅Ρ€. Π― ΡΠΊΠ°Ρ€ΠΌΠ»ΠΈΠ²Π°ΡŽ этому ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΏΡƒΡΡ‚ΡƒΡŽ модСль, которая пСрСдаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ datepicker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈ отправляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π΅Ρ‚ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ модСль Π²ΠΎ врСмя Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ я этого Ρ…ΠΎΡ‡Ρƒ! Π― Ρ…ΠΎΡ‡Ρƒ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ модСль, Π½ΠΎ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ элСмСнтС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ datepicker ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Вопрос Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сСйчас? Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ setTimeout ΠΈ снова Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ? Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ChangeDetectorRef? МнС это Π½Π΅ нравится, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ затрудняСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‰ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ слуТбС? Но эта услуга слуТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π½ΡŒ тСхничСским цСлям Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ коммСрчСской цСнности, ΠΈ я Π΄Π°ΠΆΠ΅ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

@fugwenna МСня большС всСго бСспокоило Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² 4.1.3 ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π― Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ angular вмСшивался Π² вопрос, слСдуСт Π»ΠΈ Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ setTimeout Π² Π½Π°ΡˆΠΈΡ… функциях ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π·ΠΎΠ½Π°ΠΌ Π²Π·ΡΡ‚ΡŒ Π²Π΅Ρ€Ρ…, Π½ΠΎ это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π°Π½Ρ‚ΠΈ-шаблон ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅.

@ kavi87 Π˜Ρ‚Π°ΠΊ, этот вопрос ΠΎ stackoverflow фактичСски Π΄Π°Π» ΠΌΠ½Π΅ изящноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я нуТдался. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эмиттСр событий Π² ΠΌΠΎΠ΅ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ async :
new EventEmitter(true)

Для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊ рСгрСсс, с 109 коммСнтариями, эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π΅ Ρ‚ΠΈΡ…Π° с Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ словом.

Π₯отя всС здСсь Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌΠΈ самопомощи, я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ это ошибка ΠΈΠ»ΠΈ просто ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π² вСрсии 4.2.x ΠΈ Π½ΠΎΠ²Π΅Π΅? Если Ρ‚Π°ΠΊ, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ критичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ второстСпСнный выпуск?)

@MrCroft
Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Π»ΡƒΡˆΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, - Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ способ ΡΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, хотя тСорСтичСски я понимаю, ΠΊΠ°ΠΊ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ / ΠΌΠΎΠ³Π»ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ смысл.

Π― согласСн с @JSMike ΠΈ @rosslavery Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ нСбольшого ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΈΠ»ΠΈ объяснСния Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это сообщСниС ΠΎΠ± ошибкС появилось Π² сообщСнии 4.2x Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΎ критичСских измСнСниях ... ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ этого Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ большС ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (?)

Im ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ прилоТСния, Ρƒ мСня Π΅ΡΡ‚ΡŒ div.
ЕдинствСнная Ρ†Π΅Π»ΡŒ этого div - ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ занятый ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉ.
БостояниС занятости запускаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ класса слуТбы http:

app.component.html

<!-- Busy Overlay -->
<div *ngIf="busy$ | async"
     class="overlay">
    <i class="loading">
        <i><sk-wave></sk-wave></i>
    </i>
</div>

app.component.ts:

  get busy$(): Observable<boolean> {
    return this.catolService.busy$;
  }

ПослС обновлСния Π΄ΠΎ 4.3.4 я всСгда ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ExpressionChangedAfterItHasBeenCheckedError, ΠΊΠΎΠ³Π΄Π° слуТба запускаСт состояниС занятости.

Π•ΡΡ‚ΡŒ Π»ΠΈ исправлСниС для этого простого асинхронного сцСнария?

@ emazv72 ... эта дСмонстрация stackblitz / plunker такая ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ваш случай? https://stackblitz.com/edit/angular-2p2h9s?file=app%2Fapp.component.ts ΠΈΠ»ΠΈ https://plnkr.co/edit/RPOxSVnXvM1TqKp0peSY?p=preview

@mukunku Бпасибо, я ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ.

@ mlc-mlapis Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ваш ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€, ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Ρ‚ΠΎΡ‡Π½ΠΎ https://plnkr.co/edit/uUT7tiM5BKPIy2upJPhb?p=preview

Π½ΠΎ ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π― ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ послСднСй вСрсии 4.x, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, исправлСно Π»ΠΈ это.

благодаря

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ всСм - извиняюсь Π·Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ.

Π˜Ρ‚Π°ΠΊ - это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ я понимаю, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, поэтому ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ.

ΠŸΠ»ΡƒΠ½ΠΊΠ΅Ρ€ @saveretts - Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ копия этого, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ (спасибо!) - https://plnkr.co/edit/fr7rTNTCgEhHcbKnxAWN?p=preview

Основная идСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Angular всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ - ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ выполняСтся свСрху Π²Π½ΠΈΠ· (ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ -> Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ) Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄. Π˜Ρ‚Π°ΠΊ, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ:


@Component({ 
  selector: 'app-root',
  template: `
    <!-- initially falsey -->
    <div *ngIf="sharedService.someValue">NgIf Block</div>
    <child-comp></child-comp>
  `
})
class AppRoot {
  constructor(public sharedService:SharedService){}
}
@Component({ 
  selector: 'child-component',
  template: `child comp`
})
class ChildComponent {
  constructor(public sharedService:SharedService){}
  ngOnInit(){
    this.sharedService.someValue = true;
  }
}

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ сначала запускаСтся для ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ прилоТСния, провСряСт всС Π΅Π³ΠΎ привязки, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ измСнСния Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° - ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ (Π° Π½Π΅ Π² стилС AngularJS, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ состояния), Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ привязка (* ngIf Π² Π΄Π°Π½Π½ΠΎΠΌ случаС) Π½Π΅ провСряСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ - Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ находится Π² нСсогласованном состоянии (!)

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΡ‹ фактичСски запускаСм это ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π²Π°ΠΆΠ΄Ρ‹ - Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ запускаСтся, провСряСт, Ρ‡Ρ‚ΠΎ привязки Π½Π΅ измСнились (Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎ Π±Ρ‹ Π½Π° нСсогласованноС состояниС), ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли такая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π²Ρ‹Π·Π²Π°Π² enableProdMode() Π² Ρ€Π΅ΠΏΡ€ΠΎ: https://plnkr.co/edit/GGEzdxK1eHzHyGiAdp56?p=preview. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ошибка Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ запускаСм CD x2), Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ оказываСтся Π² нСсогласованном состоянии (отобраТаСтся Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ элСмСнт, Π½ΠΎ Π½Π΅ * ngIf), Ρ‡Ρ‚ΠΎ являСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π²Π΅Ρ‰ΡŒΡŽ.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ это ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΎΡΡŒ Π½Π΅Π΄Π°Π²Π½ΠΎ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½Π΅Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ выполнял ряд Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ вставкС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² - это Π±Ρ‹Π»ΠΎ нСэффСктивно ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, особСнно ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² ngIfs ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅.

Π― Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ этот односторонний ΠΏΠΎΡ‚ΠΎΠΊ (ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ привСдСнная Π²Ρ‹ΡˆΠ΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°), Π½Π΅Π²Π΅Ρ€Π΅Π½ . Однако Π΅ΡΡ‚ΡŒ случаи, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Π½Π° самом Π΄Π΅Π»Π΅, Ρƒ нас Π΅ΡΡ‚ΡŒ аналогичная настройка Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌ Angular). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ явно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ³ΠΎΠ½ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вСрнСтся ΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ свСрху Π²Π½ΠΈΠ·). Π’Ρ‹Π·ΠΎΠ² setTimeout позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого, хотя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для этого Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Promise - см. Https://plnkr.co/edit/IoKMxEOlY9lY9LcWwFKv?p=preview

НадСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚!

@robwormald Π­Ρ‚Π° ΠΆΠ΅ ошибка Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ€Π΅ΡˆΠΈΡ‚ Π»ΠΈ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с ContentChildren . ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π΅Π· ошибок ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов Π²ΠΎ врСмя AfterContentInit, Π½ΠΎ ΠΏΡ€ΠΈ этом Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки?

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, оТидаСтся Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ссли cdr.detectChanges() вызываСтся Π²ΠΎ врСмя ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Π½Ρ‹? Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ Π² этой Ρ‚Π΅ΠΌΠ΅, для Ρ‡Π΅Π³ΠΎ я создал ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ .

@robwormald

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ @JSMike ΠΏΡ€Π°Π² Π² ΠΎΡ†Π΅Π½ΠΊΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ эта ошибка всС Π΅Ρ‰Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²ΠΎ врСмя сцСнариСв, ΠΊΠΎΠ³Π΄Π° односторонний ΠΏΠΎΡ‚ΠΎΠΊ исходит ΠΎΡ‚ Parent-> Child с использованиСм ContentChild (ren) ΠΈ ViewChild (ren).

ΠŸΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π»ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я сказал Ρ€Π°Π½ΡŒΡˆΠ΅ , Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ эта ошибка большС ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Β«ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Β», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ говорится, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Β«Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈΒ» одностороннСго ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½ΠΎ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ошибок, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² производствСнном Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅)?

@fugwenna НСт, это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ошибка, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС прСдставлСниС остаСтся Π² нСсогласованном состоянии. ΠžΠ±Ρ€Π°Π·Π΅Ρ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просматриваСт Π ΠΎΠ±, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ±ΠΎ всСм.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ эта Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Angular Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ прСдставлСния послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ составлСно. Оба этих ΠΊΡ€ΡŽΡ‡ΠΊΠ° ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ прСдставлСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° составлСно.

Если Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для этого ΠΎΠ΄ΠΈΠ½ ΠΈΠ· асинхронных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². setTimeout ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ Promise.resolve().then(() => Assignment = here)

Π•Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ шаг Π½Π°Π·Π°Π΄ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Ρ‚Π°ΠΊ ΠΏΠΎΠ·Π΄Π½ΠΎ, ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ чистый способ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Если я Π·Π°ΠΌΠ΅Ρ‡Π°ΡŽ, Ρ‡Ρ‚ΠΎ дСлаю это, я ΠΎΡ‚Π½ΠΎΡˆΡƒΡΡŒ ΠΊ этому ΠΊΠ°ΠΊ ΠΊ Π·Π°ΠΏΠ°Ρ…Ρƒ ΠΊΠΎΠ΄Π°.

Бпасибо Π·Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС @robwormald. Π― всС Π΅Ρ‰Π΅ Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… β†’ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… всС Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ использовании привязки [hidden] Π° Π½Π΅ *ngIf (см. Https://plnkr.co/edit/L4QWK5pTgF1qZatFAN4u?p = ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр). Π•ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это всС Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π΅ давая ExpressionChangedAfterItHasBeenCheckedError ?

Angular ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ checkAndUpdateView для обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ прСдставлСниС этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

function checkAndUpdateView(view) {
    // update bound properties and run ngOnChanges/ngOnInit/ngDoCheck for child directives
    updateDirectives
    // check all embedded views that belong current view
    execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate);
    // update DOM for the current view
    updateRenderer
    // perform checkAndUpdate for all child components
    execComponentViewsAction(view, ViewAction.CheckAndUpdate);
}

Он выполняСтся рСкурсивно благодаря ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ execEmbeddedViewsAction ΠΈ execComponentViewsAction . А Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ здСсь являСтся угловая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° встроСнных прСдставлСний послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ DOM.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ @saverett, я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаблон

<div *ngIf="!sharedService.displayList">Some text</div>
<router-outlet></router-outlet>

https://plnkr.co/edit/OdkzHjEXbEd3efYAisFM?p=preview

ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ *ngIf - это просто дСсахар. Π’Π°ΠΊ

<ng-template [ngIf]="sharedService.displayList">
  <div>Some text</div>
</ng-template>
<router-outlet></router-outlet>

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

  my-app
     |
   NgIf directive
       NgIf EmbeddedView
   RouterOutlet directive

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° RouterOutlet ?

Он Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² ViewContainerRef

activateWith(activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver|null) {
    ...
    this.activated = this.location.createComponent(factory, this.location.length, injector);

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ router-outlet создаСт EmbeddedView поэтому послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ RouterOutlet Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° встроСнных прСдставлСния Π² нашСм прСдставлСнии AppComponent .

  my-app
     |
   NgIf directive ([ngIf]="sharedService.displayList")
       NgIf EmbeddedView
   RouterOutlet directive 
      BComponent EmbeddedView

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅

haschanged

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСрнСмся ΠΊ нашСй основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

function checkAndUpdateView(view) {
    // update bound properties and run ngOnChanges/ngOnInit/ngDoCheck for child directives
    updateDirectives
    // check all embedded views that belong current view
    execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate);
    ...
    // update DOM for the current view
    updateRenderer
    ...
}

Angular Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС:

NgIf directive ([ngIf]="sharedService.displayList") updateDirectives(1)
      NgIf EmbeddedView   execEmbeddedViewsAction(2)
RouterOutlet directive 
      BComponent EmbeddedView  execEmbeddedViewsAction(3)

Наша Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° NgIf Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ (здСсь запоминаСтся sharedService.displayList=false ), Π° Π·Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ NgOnInit Π²Π½ΡƒΡ‚Ρ€ΠΈ BComponent (Π³Π΄Π΅ ΠΌΡ‹ мСняСм sharedService.displayList to true ) И ΠΊΠΎΠ³Π΄Π° angular выполняСт checkNoChanges ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Expression has changed after it was checked

Π—Π°Ρ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ *ngIf Π½Π° [hidden] . Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ встроСнноС прСдставлСниС, вставлСнноС RouterOutlet Π° наш [hidden]="sharedService.displayList" Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π² updateRenderer

  my-app
     |
   div{Some Text} just a node
   RouterOutlet directive 
      BComponent EmbeddedView

Angular Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ​​провСрку:

function checkAndUpdateView(view) {
    // check all embedded views that belong current view
    execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate);   BComponent.ngOnInit (1)
    ...
    // update DOM for the current view
    updateRenderer   update hidden binding (2)
    ...
}

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, привязка свойства dom Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ обновились послС Π²Ρ‹Π·ΠΎΠ²Π° ngOnInit value.

Π’ этом основноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ структурной Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ *ngIf ΠΈ привязкой свойства dom [hidden]

Бпасибо Π·Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€ @alexzuza! Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ!

setTimeout () Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сработал для мСня :) Бпасибо @jingglang :)
.subscribe (Π΄Π°Π½Π½Ρ‹Π΅ => setTimeout (() => this.requesting = Π΄Π°Π½Π½Ρ‹Π΅, 0))

@robwormald здСсь ΠΏΡ€Π°Π². Π£ мСня Π±Ρ‹Π»Π° такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ Π΅Π΅ Π±Ρ‹Π»ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я использовал NGRX ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ Π½Π° состояниС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я пСрСмСстил ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π² ΠΌΠΎΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° исчСзла. Π― знаю, Ρ‡Ρ‚ΠΎ это своСго Ρ€ΠΎΠ΄Π° Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, Π½ΠΎ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ шаблон ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° / ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° NGRX, надСюсь, это Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ вашС расслСдованиС Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.

Π‘ setTimeOut это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, спасибо @jingglang
ngAfterViewInit () {
this.innerHeight = (window.innerHeight);
setTimeout (() => this.printPosition (), 0);
}

@alexzuza , это происходит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ngIf, это происходит (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, для мСня) Ρ‚Π°ΠΊΠΆΠ΅ с [ngClass]

@ Ninja-Coding-Git Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ описал ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ случай. Π― знаю, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ с Π»ΡŽΠ±Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

Для мСня Π²Ρ‹Π·ΠΎΠ² ChangeDetectorRef послС измСнСния элСмСнта Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:

import { Component, ChangeDetectorRef } from '@angular/core'

@Component({
  selector: 'my-app',
  template: `<div>I'm {{message}} </div>`,
})
export class App {
  message: string = 'loading :(';

  constructor(private _cdr: ChangeDetectorRef) {}

  ngAfterViewInit() {
    this.message = 'all done loading :)'
    this._cdr.detectChanges();
  }

}

РСшСниС найдСно здСсь

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ @thetylerb! Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ± этом. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ngrx, ΠΈ я просто Π½Π΅ знаю, ΠΊΠ°ΠΊ это ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ обСщания ΠΏΠΎΠ²Π΅Ρ€Ρ… Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Ρ… довольно Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

@ piq9117, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° этот ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ https://github.com/angular/angular/issues/18129#issuecomment -326801192 Π― рассказал ΠΎ взаимодСйствии ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ngrx, я полагаю, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ

@victornoel спасибо! Π­Ρ‚ΠΎ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни описываСт Π½Π°ΡˆΡƒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Π£ нас Π΅ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ нСизмСняСмыС структуры Π΄Π°Π½Π½Ρ‹Ρ… (immutablejs), ΠΈ ΠΌΡ‹ Π²Π΅Π·Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ асинхронныС ΠΊΠ°Π½Π°Π»Ρ‹. Мои ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ мысли Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΈΠ΄Ρ€Π°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Π° Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² просто компСнсируСт это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ πŸ˜“

Π£ нас Π΅ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ нСизмСняСмыС структуры Π΄Π°Π½Π½Ρ‹Ρ… (immutablejs), ΠΈ ΠΌΡ‹ Π²Π΅Π·Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ асинхронныС ΠΊΠ°Π½Π°Π»Ρ‹. Мои ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ мысли Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΈΠ΄Ρ€Π°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Π° Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² просто компСнсируСт это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ changeDetection.

Π’ ΠΌΠΎΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ какая-Ρ‚ΠΎ нормализованная структура Π΄Π°Π½Π½Ρ‹Ρ… (вмСсто Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ смягчаСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΠΊΠ° этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚! : O

Π’Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π΄Π΅Π΅Ρ‚Π΅ΡΡŒ:

  • ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ измСнСния ΠΎΠ΄Π½ΠΎΠΉ части Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ обновлСния Π΄Ρ€ΡƒΠ³ΠΈΡ… частСй
  • Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ события ΠΎΡ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»ΡƒΡˆΠ°ΡŽΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ‡Π΅Ρ€Π΅Π· асинхронный ΠΊΠ°Π½Π°Π»
  • запуск обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈ запускС Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… событий
  • Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ это событиС Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ врСмя ΠΈΠ»ΠΈ Π² setTimeout

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ngrx ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ‚Π°ΠΊΡƒΡŽ β€‹β€‹ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ:

Π’ app.component.html:
<div *ngIf='(appState | async).show'>test</div>
И в app.component.ts
this.appState= this.store.select("app");

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² этой ситуации я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ сообщСниС ΠΎΠ± ошибкС, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° я добавляю логичСский Ρ„Π»Π°Π³ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ этому:
app.component.html -> <div *ngIf='show'>test</div>
app.component.ts ->
this.appState.subscribe((state: AppState) => { this.show= state.show; })

Ошибка исчСзла, ΠΌΠ½Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ понятно ΠΏΠΎΡ‡Π΅ΠΌΡƒ, Π½ΠΎ Ρ…ΠΎΡ‡Ρƒ Π·Π½Π°Ρ‚ΡŒ вашС ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π»ΠΈ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅? КакиС ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы ??

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ngrx, Π½ΠΎ Ρƒ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с простой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ querySelectorAll let chips = [].map.call(document.querySelectorAll('li.chip'), this.chipVisible);

РСшСниС @bogdancar с ChangeDetectorRef.detectChanges() подавляСт ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ChangeDetectorRef, исправляя Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ rxjs Π² angular 4.4.4. Π― просто ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡΡŒ Π½Π° Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, прСдоставляСмый слуТбой DI. Моя Ρ€Π°Π±ΠΎΡ‚Π° Π½ΠΈΠΆΠ΅:

this.eventBroadcastService.getCustomEvent({type: 'loginOpen'}).subscribe(e => { setTimeout(() => { this.isBlur = true; }, 0); });

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ setTimeout для Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ это слоТно. Π― Π½Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽ сСбя Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

ngOnChanges (changes: SimpleChanges | any) ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° исправлСна ​​просто послС пСрСмСщСния Π»ΠΎΠ³ΠΈΠΊΠΈ динамичСского измСнСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ngDoCheck ().
ngDoCheck(): void { this.checkValid = this.sourceArr.includes((this.chanedVal).toUpperCase()); }

@ asrinivas61 Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ плохая идСя. ngDoCheck часто вызываСтся Angular, ΠΈ Ссли ваш sourceArr содСрТит ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ вашСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘ΠΌ. Https://angular.io/guide/lifecycle-hooks#other -angular-lifecycle-hooks

Π― Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π» сСйчас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ngAfterViewInit с setTimeout :

setTimeout(_ => /* your code here */, 1000);

ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  public ngAfterViewInit(): void {
    // We use setTimeout to avoid the `ExpressionChangedAfterItHasBeenCheckedError`
    // See: https://github.com/angular/angular/issues/6005
    setTimeout(_ => this.isLoadingInProgress = false, 1000);
  }

@dgroh Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ фактичСский Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚, Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ js выполнял ваш ΠΊΠΎΠ΄ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ асинхронной Π·Π°Π΄Π°Ρ‡Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ запуск обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

@victornoel Π― ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΌΠΈ, Ссли Π²Ρ‹ явно Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚Π΅ detectChanges of ChangeDetectorRef . Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС это Π½Π΅ понадобилось.

@dgroh, Ρ‚Ρ‹, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ мСня понял, я просто выступал Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

public ngAfterViewInit(): void {
    // We use setTimeout to avoid the `ExpressionChangedAfterItHasBeenCheckedError`
    // See: https://github.com/angular/angular/issues/6005
    setTimeout(_ => this.isLoadingInProgress = false);
  }

НСльзя Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ шаг послС ngAfterViewInit ΠΊΠ°ΠΊ setTimeout ? (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ngAfterViewLoad )

@ aks4it , ΠΏΠΎΡ…ΠΎΠΆΠ΅, это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ ΠΌΠ½Π΅ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? ЯвляСтся Π»ΠΈ ΠΊΠΎΠ΄ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ динамичСских ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² синхронным?

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ дСмонстрация plunker ΠΈΠ· angular docs ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ. НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это Ρ‚Π°ΠΌ? :) Благодаря

@luckylooke

  ngAfterViewInit() {
    //this.loadComponent();
    this.getAds();
  }

это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

Π― Π½Π΅ понимаю вашСго трСбования, Π½ΠΎ Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π² 3 сСкунды? Ссли Π΄Π°, это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ loadComponent, ΠΌΠ½Π΅ это удаСтся:

ngAfterViewInit() {
    setTimeout(()=>{this.loadComponent()},0)
  }

@istiti Π― смог ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ChangeDetectorRef , поставив detectChanges() послС ... data = data

Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ взят ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΌΠ½Π΅ Π±Ρ‹Π»ΠΎ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. НС Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΈΠ»ΠΈ ChangeDetectorRef.

Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, я Π±Ρ‹Π» слишком ΠΊΡ€Π°Ρ‚ΠΎΠΊ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ постС ... Π― Ρ…ΠΎΡ‚Π΅Π» ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°ΠΆΠ΅ ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС Π² ΠΊΠΎΠ΄Π΅.

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ свСдСнию, я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ здСсь Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚, Π½ΠΎ ошибки исчСзли, ΠΊΠΎΠ³Π΄Π° я Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ» Ρ€Π΅ΠΆΠΈΠΌ prod Π² main.ts
`enableProdMode ()

// Ссли (environment.production) {

// enableProdMode ();

//} `

"@ angular / core": "^ 4.2.4"
"ΠΌΠ°ΡˆΠΈΠ½ΠΎΠΏΠΈΡΠ½Ρ‹ΠΉ тСкст": "~ 2.3.3"

@bakthaa ... это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ( @Inputs() ), которая вызываСтся послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° CD, вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° Π½Π΅ Π² производствСнном Ρ€Π΅ΠΆΠΈΠΌΠ΅ прилоТСния Angular. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° скрыта Π² производствСнном Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π½ΠΎ ΠΎΠ½Π° всС Π΅Ρ‰Π΅ сущСствуСт ... ΠΈ, вСроятно, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ источником Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ вводящих Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов Π² производствСнном Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Angular 5, ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ввСдя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ChangeDetectorRef Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ заставив Π΅Π³ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния.

    constructor(private changeDetector: ChangeDetectorRef) {}

    ngAfterViewChecked(){
      this.changeDetector.detectChanges();
    }

@ Sabri-Bouchlema ... Π΄Π°, это ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΡ‚ΡŒ ... Π½ΠΎ всС ΠΆΠ΅ Π²Π°ΠΌ слСдуСт Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ... ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ @Inputs измСняСтся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска ... ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π»ΠΎΠ³ΠΈΠΊΠ° Π²Π΅Ρ€Π½Π° ... ΠΈ это ΠΏΡ€Π°Π²Π΄Π°, Ρ‡Ρ‚ΠΎ Π² 95% случаСв ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Π΅Π· Π²Ρ‹Π·ΠΎΠ²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… detectChanges() .

ИспользованиС angular 5.1.2. Π― ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π² ngAfterViewChecked. Как сообщил @ aks4it , ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ΄ Π² setTimeout, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π».

Π£ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с вСрсиСй 4.01
ng-version = "4.0.1

Во ТС самоС и с angular 4.4.6

Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ this.changeDetector.detectChanges();

Π― написал этот ΠΏΠ»ΡƒΠ½ΠΊΠ΅Ρ€ с использованиСм ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρƒ мСня Π΅ΡΡ‚ΡŒ ExpressionChangedAfterItHasBeenCheckedError. Если я измСню порядок Π² своих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, ошибка исчСзнСт:

https://plnkr.co/edit/Mc0UkTR2loI7wgmLAWtX

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» changeDetector.detectChanges, Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

@AlexCenteno ... ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΈΠ΄Π΅Ρ‚ свСрху Π²Π½ΠΈΠ· ... ΠΈ свойство value для comp1 @Input() public value:String=null; сначала устанавливаСтся comp2.value ... <div comp1 [value]="comp2.value"></div> ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ° установлСн Π½Π° Hello Ρ‡Π΅Ρ€Π΅Π· собствСнный @Input() ... всС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска ... поэтому повторная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ссли Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° CD Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² свойствС value Π½Π° comp1 .

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ @ mlc-mlapis спасибо Π·Π° вашС врСмя. Π—Π½Π°Ρ‡ΠΈΡ‚, ошибки Π½Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ? Π― Π΄ΡƒΠΌΠ°ΡŽ, это Ρ‚ΠΎ, ΠΎ Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ Π½Π΅ стоит Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° я Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ enableProdMode?

@AlexCenteno ... Π΄Π°, Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ prod ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° послС Ρ†ΠΈΠΊΠ»Π° CD Π½Π΅ запускаСтся ... Π½ΠΎ это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ вас это Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² value cross. Π’Π°ΠΊΠΆΠ΅ сущСствуСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ <div> Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ свойства value . ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ просто:

<comp1 [value]="comp2.value"></comp1>
<comp2 #comp2 value="Hello"></comp2>

ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° использованиС @Output() Π½Π° <comp2> Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ [value] Π½Π° comp1 Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ошибок.

ИспользованиС [email protected] с angular@5 standart store.select throw warning ExpressionChangedAfterItHasBeenCheckedError Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ нСкоррСктная Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠ΄. ΠžΡ‚Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΠΎΡ‚Π±ΠΎΡ€ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях / ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ….

@Component({
  ...
  template `
  ...
      <div [ngClass]="{
        'home__sidenav': true,
        'home__sidenav--active': (isActiveSidenavMenu$ | async)
      }">
  ...
  `
})
export class HomeContainer {
  isActiveSidenavMenu$ = this.store.select(fromHome.isActiveSidenavMenu);
  ...
}

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ удаляСт ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ сообщСниС, Π½ΠΎ ΠΎΠ½ каТСтся Π±ΠΎΠ»Π΅Π΅ слоТным:

@Component({
  ...
  template `
  ...
      <div [ngClass]="{
        'home__sidenav': true,
        'home__sidenav--active': isActiveSidenavMenu
      }">
  ...
  `
})
export class HomeContainer {
  isActiveSidenavMenu$ = this.store.select(fromHome.isActiveSidenavMenu);
  isActiveSidenavMenu;

  ngOnInit() {
    this.isActiveSidenavMenu$.subscribe(res => {
      this.isActiveSidenavMenu = res;
      this.cd.detectChanges();
    });
  }
}

Π•ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ?

@rimlin Π²Ρ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ просто ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ?

ngOnInit() {
  this.store.select(fromHome.isActiveSidenavMenu)
    .subsbrice(res => {
      this.isActiveSidenavMenu = res;
    });
}

Π”ΡƒΠΌΠ°ΡŽ, Ρƒ мСня Π±Ρ‹Π»Π° похоТая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠΈ, избСгая async Π² шаблонС, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ΅Π½Π°.

@ piq9117 спасибо Π·Π° совСт, ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, каТСтся Π±ΠΎΠ»Π΅Π΅ понятным с мСньшим количСством ΠΊΠΎΠ΄Π°, Π½ΠΎ здСсь Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ this.cd.detectChanges(); , ΠΈΠ½Π°Ρ‡Π΅ просмотр Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ.

ngOnInit() {
    this.store.select(fromHome.isActiveSidenavMenu).subscribe(res => {
      this.isActiveSidenavMenu = res;
      this.cd.detectChanges();
    });
}

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Angular 5.2, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π΄Π΅Π»Π°Π». Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° мСня

constructor(private changeDetector: ChangeDetectorRef) {}

ngAfterViewInit(){
  this.changeDetector.detectChanges();
}

ИспользованиС Angular 5.2, исправлСно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ detectChanges ()

Π”Π°, ΠΌΡ‹ исправили это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° detectChanges () (Angular 5.1). Π― здСсь со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, хотя ΠΎΠ½ΠΈ Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ это всСго лишь ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΈ Π΅Π³ΠΎ Π½Π΅ слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ Π² долгосрочной пСрспСктивС. Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΡ€ΡŽΡ‡ΠΎΠΊ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Запуск ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ каТСтся Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, это продолТаСтся ΠΈ продолТаСтся, хотя всС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΈ совСты ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ Π²Ρ‹ΡˆΠ΅.

  1. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это - ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ / Ρ€Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠΌ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ свСрху Π²Π½ΠΈΠ·. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² шаблонС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ создали, ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΊΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, Π²Π½ΠΈΠ· ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ вашСго ΠΊΠΎΠ΄Π° ΠΈΠ· ngAfterViewInit Π² ngOnInit Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях.
  2. this.changeDetectorRef.detectChanges(); - ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΉ способ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этим ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ Π² 5% случаСв, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ примСчания:

  1. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ остороТны ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ дСйствий Π² ngAfterViewInit ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² DOM, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ.
  2. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ остороТны ΠΏΡ€ΠΈ использовании любого ΠΈΠ· Ρ…ΡƒΠΊΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Check ΠΈΠ»ΠΈ Checked ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ обнаруТСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
  3. setTimeout ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ Π΄Π²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹ΡˆΠ΅.
  4. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этой ошибки Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ производствСнный Ρ€Π΅ΠΆΠΈΠΌ «исправляСт» ΠΎΡˆΠΈΠ±ΠΊΡƒ, нСдопустим, ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ prod, Π½ΠΎ ваш ΠΊΠΎΠ΄ Ρ€Π΅ΠΆΠΈΠΌΠ° prod ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ оставляСт измСнСния Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ рассинхронизации прСдставлСния ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π΅Π·Π²Ρ€Π΅Π΄Π½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… / прСдставлСний ΠΈ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.
  5. ΠžΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ сильно измСнился Π² Angular, поэтому публикация Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ это сдСлали Π² вСрсии X Angular, Π½Π΅ слишком ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚.
  6. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ состояний ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ являСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ просто добавляли ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ односторонний ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, Π² эти Ρ…ΡƒΠΊΠΈ ΠΈ запускал Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

НаконСц, просто ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ эта ошибка Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с Angular. Π­Ρ‚Π° ошибка здСсь, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сдСлали Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ Π² своСм ΠΊΠΎΠ΄Π΅ ΠΈ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚Π΅ ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ систСму ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, которая Π΄Π΅Π»Π°Π΅Ρ‚ Angular быстрым ΠΈ эффСктивным.

ΠŸΠΎΡΡ‚Ρ‹ Π²Ρ‹ΡˆΠ΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ посты Π² Π±Π»ΠΎΠ³Π°Ρ… Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ этот вопрос, ΠΈ ΠΈΡ… стоит ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ эту ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ модСль ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅.

@Splaktar Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ (ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ мСня), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΠΌΡΡ? ΠΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ становится слишком Π΄Π»ΠΈΠ½Π½ΠΎΠΉ, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… просто ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ. πŸ˜ƒ

@Splaktar Π’Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅: Β«Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² шаблонС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Β».

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ страниц ΠΈ Ρ‚. Π”., И ΠΎΠ½ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ свои собствСнныС ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠ³ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² качСствС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… для опрСдСлСния Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ загруТаСтся Π² прСдставлСниС.

Π’ этой, ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ распространСнной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, я Π±Ρ‹ использовал ΠΎΠ±Ρ‰ΡƒΡŽ Π³ΠΎΡΡƒΠ΄Π°Ρ€ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ слуТбу, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π±Ρ‹ сами, Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ подписываСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Ρ‚ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ родитСля, Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Π­Ρ‚ΠΎ Π½Π΅ соотвСтствуСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ «снизу Π²Π²Π΅Ρ€Ρ…Β», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ всС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· слуТбы ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Π²Π½ΠΈΠ· Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ связь.

ΠŸΠΎΡ…ΠΎΠΆΠ΅, это ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚Π΅ Π²Ρ‹ΡˆΠ΅, ΠΈ для мСня это источник ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Когда Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ рСгистрируСтся Π² слуТбС, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π­Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ?

И Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ подтвСрТдСнная ошибка:
https://github.com/angular/angular/issues/15634

@ Martin-Wegner Π‘ΠΌ. Https://github.com/angular/angular/pull/18352#issuecomment -354170352

@alignsoft ... Ρƒ вас Π΅ΡΡ‚ΡŒ простоС воспроизвСдСниС вашСго Π΄Π΅Π»Π° ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Π²ΠΈΠ΄Π΅ Stackblitz? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π½Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описанная Π²Π°ΠΌΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°.

@trotyl Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚ @Splaktar Π½Π΅ связаны с ΠΌΠΎΠ΅ΠΉ простой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ здСсь https://github.com/angular/angular/issues/17572#issuecomment -311589290 ΠΈΠ»ΠΈ?

@ Martin-Wegner ... Π² вашСм случаС достаточно Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ngAfterViewInit Π½Π° ngOnInit hook.

@alignsoft , ΠΊΠ°ΠΊ сказал @ mlc-mlapis, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Stackblitz Π±Ρ‹Π» Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для дСмонстрации ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ для этого случая. Π­Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ использовании ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° сСрвисов, Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Ρ…, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈ Ρ‚. Π”. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ случай Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Ρ‚Π΅ΠΌΠΎΠΉ для StackOverflow.

@Splaktar Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я

@ mlc-mlapis Π²Π°Ρƒ спасибо, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ :)

@alignsoft , сСгодня я создавал ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π΅Π΄Π΅Ρ‚ сСбя Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ описали. @ mlc-mlapis, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΡƒΡ€Π΅Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° stackblitz . Если Π²Ρ‹ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ «БистСма CMSΒ» Π² Π»Π΅Π²ΠΎΠΉ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ExpressionChangedAfterItHasBeenCheckedError .

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ admin.component дСйствуСт ΠΊΠ°ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° 3 Π²Π΅Ρ‰ΠΈ:

  • ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Π²ΠΎΠ³ΠΎ Π½Π°Π²ΠΈΠ³Π°Ρ‚ΠΎΡ€Π°
  • Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Ρ‚ΠΈΠΊΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для отобраТСния своСго собствСнного Ρ‚ΠΈΠΊΠ΅Ρ€Π°
  • Ρ€Π°Π·Π΄Π΅Π» основного содСрТимого, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, относящиСся ΠΊ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, Ρ‡Π΅Ρ€Π΅Π· <router-outlet></router-outlet> .

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

<div class="ticker-container" *ngIf="tickedMessage !== ''">
  <h1>{{tickedMessage}}</h1>
  <button type="button" (click)="tickedMessage = ''">
    close
  </button>
</div>

<div class="side-nav">
  <h2>side nav</h2>
  <ul>
    <li><a routerLink="/">dashboard</a></li>
    <li><a routerLink="/apps/thirdpartycms">CMS System</a></li>
  </ul>
</div>
<div class="main-content-container">
  <router-outlet></router-outlet>
</div>
export class AdminComponent implements OnInit, OnDestroy {
  private _tickedMessageSubscription: Subscription;

  tickedMessage: string = '';

  constructor(
    private router: Router,
    private adminService: AdminService
  ) { }

  ngOnInit() {
    /* 
      On the side nav if you click on CMS System, this piece of code throws the exception: 
      "ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed 
       after it was checked. Previous value: 'false'. Current value: 'true'.""
    */
    this._tickedMessageSubscription = this.adminService.tickedMessageAnnounced$.subscribe((tickedMessage: string) => {
      this.tickedMessage = tickedMessage;
    });
  }

  ngOnDestroy() {
    this._tickedMessageSubscription.unsubscribe();
  }
}

Π˜ΡΡΠ»Π΅Π΄ΡƒΡ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΏΡ€ΠΈ использовании <router-outlet></router-outlet> , я ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π», Ρ‡Ρ‚ΠΎ Ссли я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ @Output для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° router-outlet Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° события. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это настраиваСмоС событиС, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° router-outlet Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я пропустил этот ΠΌΠ΅Ρ‚ΠΎΠ΄. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» ΠΎΠ± ΠΎΠ±Ρ‰ΠΈΡ… сСрвисах Π½Π° angular.io, я написал свой собствСнный:

ΠžΠ±Ρ‰ΠΈΠΉ сСрвис

import { Injectable } from '@angular/core';
import { Subject }    from 'rxjs/Subject';

@Injectable()
export class AdminService {

  private _tickedMessageAnnounced = new Subject<string>();

  tickedMessageAnnounced$ = this._tickedMessageAnnounced.asObservable();

  announceTickedMessage(tickedMessage: string) {
    this._tickedMessageAnnounced.next(tickedMessage);
  }
}

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² называСтся this.adminService.announceTickedMessage(this._tickedMessage); :

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

import { Observable } from 'rxjs/Observable';
import { Component, ViewChild, OnInit, Inject } from '@angular/core';
import { AdminService } from '../../../core/admin/admin.service';

@Component({
  selector: 'cms',
  templateUrl: './thirdparty-cms.component.html',
  styleUrls: ['./thirdparty-cms.component.scss'],
})
export class ThirdPartyCmsComponent implements OnInit {
  private _tickedMessage: string;
  constructor(private adminService: AdminService) { }

  ngOnInit(): void {
    this._tickedMessage = 'Please do not create an entry for a page URL that does not exist in the CMS system';

    this.adminService.announceTickedMessage(this._tickedMessage);
  }
}

Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹Π·Π²Π°Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ExpressionChangedAfterItHasBeenCheckedError ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ попытался ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· своих общСдоступных свойств с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ значСния сообщСния, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ:

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅)

export class AdminComponent implements OnInit, OnDestroy {
  private _tickedMessageSubscription: Subscription;

  tickedMessage: string = '';

  constructor(
    private router: Router,
    private adminService: AdminService
  ) { }

  ngOnInit() {
    /* 
      On the side nav if you click on CMS System, this piece of code throws the exception: 
      "ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed 
       after it was checked. Previous value: 'false'. Current value: 'true'.""
    */
    this._tickedMessageSubscription = this.adminService.tickedMessageAnnounced$.subscribe((tickedMessage: string) => {
      this.tickedMessage = tickedMessage;
    });
  }

  ngOnDestroy() {
    this._tickedMessageSubscription.unsubscribe();
  }
}

Π§Ρ‚ΠΎ исправило ExpressionChangedAfterItHasBeenCheckedError , Ρ‚Π°ΠΊ это асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° подписки ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ сообщСния:

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (с асинхронным ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ)

export class AdminComponent implements OnInit, OnDestroy {
  private _tickedMessageSubscription: Subscription;

  tickedMessage: string = '';

  constructor(
    private router: Router,
    private adminService: AdminService
  ) { }

  ngOnInit() {
    /* 
      This clears the ExpressionChangedAfterItHasBeenCheckedError exception.
    */
    this._tickedMessageSubscription = this.adminService.tickedMessageAnnounced$.subscribe(async (tickedMessage: string) => {
      this.tickedMessage = await tickedMessage;
    });
  }

  ngOnDestroy() {
    this._tickedMessageSubscription.unsubscribe();
  }
}

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΠΌΠΈΡ€Π° WPF, каТСтся, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° наблюдаСмой подписки, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ асинхронно?

Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Angular, поэтому, поТалуйста, проявитС Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ сострадания ΠΊ ΠΌΠΎΠΈΠΌ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌ Angularz: P

@ktabarez Бпасибо, это ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ!

@ktabarez Бпасибо! ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, это прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! Π― Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π» подписку Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π», Π½ΠΎ казался грязным.

Π― Π²ΠΈΠΆΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ опросС состояния redux Π΅Π³ΠΎ гарантированная доставка, Π½ΠΎ ΠΏΡ€ΠΈ запускС, ΠΊΠ°ΠΊ это, ΠΊΠΎΠ³Π΄Π° вставляСтся Π² ngOnInit, Π° Π½Π΅ Π² конструкторы

@ktabarez Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо!

Π’Π°ΡˆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ async ... await in subscribe Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

@ktabarez По сути, вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ setTimeout ({}, 0), Π½ΠΎ каТСтся Π±ΠΎΠ»Π΅Π΅ элСгантным. Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нравится! Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ заставило мСня ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Ρ‡Π΅Π³ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ (ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ C # await Task.FromResult (tickedMessage)), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°Π΄ΡƒΠΉΡ‚Π΅ΡΡŒ этому!

Π˜Ρ‚Π°ΠΊ, вопрос: ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ async / await ΠΏΡ€ΠΈ вычислСнии свойства наблюдаСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· сСрвСрной части, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ часто ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ? Π§Ρ‚ΠΎ Π² ngClass Π΄Π΅Π»Π°Π΅Ρ‚ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ? Π― ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ это ΠΏΡ€ΠΈ использовании {наблюдаСмого | async} ΠΊΠ°Π½Π°Π». Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ async / await для мСня - Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΎΡ†Π΅Π½ΠΊΠΈ. (ΠΈΠ»ΠΈ асинхронный ΠΊΠ°Π½Π°Π» - Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄)

Π£ мСня Π΅ΡΡ‚ΡŒ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° Ρƒ ΠΌΠΎΠ΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π΅ΡΡ‚ΡŒ нСсколько Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Один ΠΈΠ· Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Input, Π³Π΄Π΅ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· свойства Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π° свойство ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ свои Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Observable / Promise (ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΎΠ±Π°).

parent.component.html

<mat-tab-group>
   <mat-tab>
      <app-child-1></app-child-1>
   </mat-tab>
   <mat-tab>
      <app-child-2></app-child-2>
   </mat-tab>
   <mat-tab>
      <app-child-3 [datasource]="data"></app-child-3>
   </mat-tab>
</mat-tab-group>

parent.component.ts

// ... omitted...
data: any;

ngOnInit() {
   this.service1.getMethod(some_id).then(data => this.data = data);
}

Π― наткнулся Π½Π° всС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π² Π²Π΅Ρ‚ΠΊΠ΅. Но Π² ΠΌΠΎΠ΅ΠΌ случаС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌΠ΅ΠΊΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΠ·-Π·Π° манипулирования DOM, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, помСщСния выраТСния Π² _ (ngIf) _ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ng-template , ng-container ΠΈ ngTemplateOutlet .

<ng-container *ngTemplateOutlet="data ? content : loading"></ng-container>

<ng-template #content>
   <mat-tab-group>
      <mat-tab>
         <app-child-1></app-child-1>
      </mat-tab>
      <mat-tab>
         <app-child-2></app-child-2>
      </mat-tab>
      <mat-tab>
         <app-child-3 [datasource]="data"></app-child-3>
      </mat-tab>
   </mat-tab-group>
</ng-template>

<ng-template #loading>Loading your component. Please wait</ng-template>

Π― смог Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π±Π΅Π· использования ChangeDetectorRef ΠΈΠ»ΠΈ setTimeout()

Для мСня эта ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ / скрытии поля Π² соотвСтствии с условиСм, я смог Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π΅ послС примСнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ настройки ΠΏΠΎΠ»Π΅ΠΉ:

this.form.get ('field').updateValueAndValidity();

Π― пытался ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° mat, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ открываСтся ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ я Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я Π²ΠΈΠ΄Π΅Π» Π² этом ΠΏΠΎΡ‚ΠΎΠΊΠ΅ (ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ, Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠ°Π½Π°Π», послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ просмотра, послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ содСрТимого) ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ. По-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π—Π°Ρ‚Π΅ΠΌ я ΡƒΠ²ΠΈΠ΄Π΅Π» сообщСниС @Splaktar ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ односторонний ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, поэтому я Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ сдСлал Ρ„Π»Π°Π³ Π² ngrx, говорящий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈ подписался Π½Π° Π½Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎ, ΠΈ я всС Π΅Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π§Ρ‚ΠΎ, Ρ‡Π΅Ρ€Ρ‚ возьми, ΠΌΠ½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ? НСуТСли Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π½Π΅Ρ‚ способа ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³, Π½Π΅ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΠ² Π΅Π³ΠΎ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ?

Π’ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:
this.store.pipe( select(getShouldLogin), ).subscribe((shouldLogin: boolean) => { if (shouldLogin) { this.openLoginDialog(); } }); this.checkUserId();

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:
checkUserId() { const id = this.cookies.getUserId(); if (!id || id === 'undefined') { this.connApi.setShouldLogin(true); } }
openLoginDialog() { const dialogRef = this.dialog.open(LoginDialogComponent, { width: '400px', height: '300px', }); dialogRef.afterClosed().subscribe(result => this.handleLogin(result)); }

ИспользованиС angular 6.0.0-rc.1

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ angular с ngrx ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» эту ΠΎΡˆΠΈΠ±ΠΊΡƒ послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹.
исправлСно установкой
ChangeDetectionStrategy.OnPush
Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΡ‹

ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ. ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ всСвозмоТныС ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ. setTimeout Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·, Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запуск dialog.open ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΉ ΠΆΠ΅ ошибкС. Π•ΡΡ‚ΡŒ статус ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ?

Π― столкнулся с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠŸΡ€ΠΎΠ±ΠΎΠ²Π°Π» всС, Π½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ одностороннСм ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….
Π’ΠΎΡ‚ ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ selectedwoids. Π³Π΄Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚Π° ΠΆΠ΅ ошибка.

        <p-row> <p-column class="text-left" footer="{{selectedWoids.length}} {{getWoidString(selectedWoids.length)}} selected out of {{getTotalCounts()}} {{getWoidString(getTotalCounts())}}" colspan="11"></p-column> </p-row>

private setSelectedWoidsCount () {
if (this.isSelectAllWoids) {
this.selectedWoids = this.allWoids;
}
}

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Angular ...

Π― Π²ΠΈΠΆΡƒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ошибки Β«ExpressionChanged ...Β» послС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с 4.1.2 Π½Π° 4.2.3 .

Π’ ΠΌΠΎΠ΅ΠΌ случаС Ρƒ мСня Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· слуТбу. Услуга прСдоставляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠΉ основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈ ComponentA создаСтся Π΄ΠΎ ComponentB .

Π’ 4.1.2 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π±Π΅Π· ошибок:

Π¨Π°Π±Π»ΠΎΠ½ _ComponentA: _

<ul *ngIf="myService.showList">
...

_ComponentB Класс: _

ngOnInit() {
  this.myService.showList = false; //starts as true in the service
  ...
}

Π’ 4.2.3 ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ шаблон ComponentA ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибки Β«ExpressionChanged ...Β»:

_ComponentA Π¨Π°Π±Π»ΠΎΠ½: _

<ul [hidden]="!myService.showList">
...

Π― всС Π΅Ρ‰Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ стало ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с *ngIf Π½Π° [hidden] Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π’Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ с ngIf Π½Π° [скрытый]

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Angular 6?

@alokkarma ... слишком старый ... Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ пСрСнСсти Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π° Angular 6 ΠΈΠ»ΠΈ 5. Но ваш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° выглядит ясным ... Π²Ρ‹ измСняСтС свойство слуТбы Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ B, ΠΈ это влияСт Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ A. Оба Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, поэтому всС Ρ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ вмСстС Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ ΠšΠ”. Π§Ρ‚ΠΎ Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅?

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ случай Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² вСрсии 4.1.2, связан с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ошибками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ устранСны Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 4.2.3.

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Angular 6. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ MessageService для связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΌΠΎΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ прилоТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ΅ содСрТимоС ΠΏΠ°Π½Π΅Π»ΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ вошСл Π² систСму (ΠΈΠ»ΠΈ Π½Π΅Ρ‚)

Он ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΡ€ΠΎΠΌΠ΅ этой ошибки!
Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ EventEmitter, Π½ΠΎ это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! ΠΈΠ»ΠΈ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

@dotNetAthlete ... ΠΏΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π΅ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Π½Π° Stackblitz. Π“ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ± этом Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° слоТно.

@dotNetAthlete Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π³Π΄Π΅ Ρƒ мСня Π΅ΡΡ‚ΡŒ слуТба состояний, которая содСрТит Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы Π² качСствС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° повСдСния (asObservable) Π² основном ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π² Π½Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы Π² слуТбС состояний. для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° для наблюдСния ΠΈ отобраТСния.

ВсСгда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»Π° ошибка Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎΒ», ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ обновлял Π΅Π³ΠΎ, поэтому я дСлаю это сСйчас Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ / ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅:

    this.stateSvc.currentPageTitle$
      .subscribe(
        (async (pageTitle) => {
          this.pageTitle = await pageTitle;
        }))

Π“Π΄Π΅ Π½Π° государствСнной слуТбС это:

  // Store
  private currentPageTitleStore = new BehaviorSubject<string>("");

  // Getter (as Observable)
  public currentPageTitle$ = this.currentPageTitleStore.asObservable();

  // Setter
  public setCurrentPageTitle(pageTitle: string) {
    this.currentPageTitleStore.next(pageTitle);
  }

Π­Ρ‚ΠΎ устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ основано Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΎΡ‚Π·Ρ‹Π²Π°Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… участников этой Ρ‚Π΅ΠΌΡ‹.

@alignsoft - красивоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° исправлСна ​​в ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Angular 6.

Π― Π²ΠΈΠΆΡƒ это ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ страницы Π½Π° angular 7 сСйчас ...
Π― ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ngAfterViewInit
ΠŸΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅

  public activate() {
    setTimeout(() => this.active = true);
  }

Π― нашСл Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² этой Ρ‚Π΅ΠΌΠ΅ https://github.com/angular/angular/issues/10762
ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я использовал Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° AfterContentInit , ошибка исчСзла.

@alignsoft , просто добавляю ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ измСнСнию, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ BehavioralSubject вмСсто Subject,

Π― ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠ» это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

\\ Component
export class AppComponent implements OnInit {
  isLoading: Boolean;

  constructor(private loaderService: LoaderService) { }

  ngOnInit(){
    this.loaderService.isLoading.subscribe(async data => {
      this.isLoading = await data;
    });
  }
}
\\ Service
@Injectable({
  providedIn: 'root'
})
export class LoaderService {
  // A BehaviorSubject is an Observable with a default value
  public isLoading: BehaviorSubject<Boolean> = new BehaviorSubject(false);
  constructor() {}
}
\\ Any other component or in my case, an interceptor that has the LoaderService injected
this.loaderService.isLoading.next(true);

Но я согласСн с @daddyschmack , я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ любой рСсурс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΡƒΡŽΡΡ любого ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… исправлСний ( cdr.detectionChanges() ΠΈΠ»ΠΈ async await ΠΈΠ»ΠΈ aftercontentchecked ), ΠΏΠΎΡ‡Π΅ΠΌΡƒ Атрибут [hidden] Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Π½Π΅ *ngIf

@acidghost Бпасибо Π·Π° ссылку, ΠΎΠ½Π° Ρ€Π΅ΡˆΠΈΠ»Π° мою ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. На самом Π΄Π΅Π»Π΅ я отказался ΠΎΡ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это Π² ΠΎΠ΄Π½ΠΎΠΉ области ΠΌΠΎΠ΅Π³ΠΎ прилоТСния, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° это снова Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΉ области ...

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° автоматичСски Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈΠ·-Π·Π° бСздСйствия.
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, сообщитС ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, Ссли Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ»ΠΈ связанной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ нашСй ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅ автоматичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ΠΎΠ² .

_Π­Ρ‚ΠΎ дСйствиС Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ автоматичСски Π±ΠΎΡ‚ΠΎΠΌ. _

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ