[ ] 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>
ΠΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ 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 ΠΈΠ»ΠΈ Π²ΡΡΠ΅
ΠΡΠΈΠ»Π°Π³Π°Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΠ½ΠΈΠ·ΠΈΠ» Π²Π΅ΡΡΠΈΡ Π΄ΠΎ 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
Π― ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΡΡΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ 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
ΠΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅
Π’Π΅ΠΏΠ΅ΡΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π½Π°ΡΠ΅ΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
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
ΠΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π΄Π΅Π΅ΡΠ΅ΡΡ:
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ 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). Π― Π·Π΄Π΅ΡΡ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ, Ρ ΠΎΡΡ ΠΎΠ½ΠΈ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ, ΠΈ Π΅Π³ΠΎ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ²Π΅Ρ Π² Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅. ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΡΡΡΠΎΠΊ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
ΠΠ°ΠΏΡΡΠΊ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ.
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ, Ρ ΠΎΡΡ Π²ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ ΠΈ ΡΠΎΠ²Π΅ΡΡ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ Π²ΡΡΠ΅.
ngAfterViewInit
Π² ngOnInit
Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
.this.changeDetectorRef.detectChanges();
- ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΈ ΠΏΡΠΈΠ·Π½Π°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ Π² 5% ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΡΠΌ.ΠΡΠΎΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ:
ngAfterViewInit
ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
Π² DOM, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ.Check
ΠΈΠ»ΠΈ Checked
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.setTimeout
ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ, Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Ρ Π΄Π²Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΡΠ΅.ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ 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 Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΡΡΠ»ΠΊΡ, ΠΎΠ½Π° ΡΠ΅ΡΠΈΠ»Π° ΠΌΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΠΎΡΠΊΠ°Π·Π°Π»ΡΡ ΠΎΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΡΠ½ΠΎΠ²Π° Π½Π°ΡΠ°Π»ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π² Π½ΠΎΠ²ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ...
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΠΈΠ·-Π·Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠΎΠΎΠ±ΡΠΈΡΠ΅ ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
Π£Π·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Π½Π°ΡΠ΅ΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΠ² .
_ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π±ΡΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±ΠΎΡΠΎΠΌ. _
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Ρ 4.1.3 Π΄ΠΎ 4.2.3. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ setTimeout ΡΡΡΡΠ°Π½ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΈΠ·:
PanictUtil.getRequestObservable (). Subscribe (data => this.requesting = data);
ΠΊΠΎΠΌΡ:
PanictUtil.getRequestObservable (). Subscribe (data => setTimeout (() => this.requesting = data, 0));