Angular: 4

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдЬреВрди 2017  ┬╖  201рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/angular

рдореИрдВ рдПрдХ рдЬрдорд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ ...


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

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░


Async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
рддреНрд░реБрдЯрд┐: рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдЪреИрдирдбреИрдЧ рдЖрдлреНрдЯрд░ рдЗрдЯрд╣реИрд╕рдмреИрдирдЪреЗрдХрдбреЗрд▓рд░: рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдмрджрд▓ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдкрд┐рдЫрд▓рд╛ рдорд╛рди: ''ред рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп: 'рдХреБрдЫ'

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ

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

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

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

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

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ 4.1.3 рд╕реЗ 4.2.3 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рд╕реЗ:

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

рд╕реЗрд╡рд╛:

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

рд╕рднреА 201 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рдореБрджреНрджрд╛ рдерд╛ред рдпрд╣рд╛рдБ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЙрдирдХреЗ рднрдВрдбрд╛рд░ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдЬрдм рдХреЛрдгреАрдп 2 рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдгреАрдп 4.2.2 рдкрд░ рдореБрдЭреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЖрддрд╛ рд╣реИред
https://github.com/angular-redux/store/issues/428

4.1.3 рд╕реЗ 4.2.x рддрдХ рдЯрдХрд░рд╛рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдШрдЯрдХреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред 4.1.3 рдкрд░ рд╡рд╛рдкрд╕ рдЖрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕реА рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ рдПрдХ рдиреНрдпреВрдирддрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ (рд╢рд╛рдпрдж) рдкреНрд░рддрд┐рдЧрдорди рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрдВрджрд╛ рдЪреЗрдХ рджреЗрд╡ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЛрдб 4.2.x рд╕реЗред рд▓реЗрдХрд┐рди рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреИрдВрдЬ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рдЯрд┐рдк рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдореБрдЭреЗ 4.1.3 рд╕реЗ 4.2.3 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рд╕реЗ:

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 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдХреБрдЫ рдЫрд┐рдкрд╛рдиреЗ / рджрд┐рдЦрд╛рдиреЗ рдХреЗ рддрд░реНрдХ рдЕрдм рдЯреВрдЯ рдЧрдП рд╣реИрдВред рдпрд╣ рдЕрдХреЙрд░реНрдбрд┐рдпрди-рд╢реИрд▓реА рдХрд╛ рддрд░реНрдХ рд╣реИ, рдЬрд╣рд╛рдВ рджреГрд╢реНрдпрддрд╛ рд╡рд░реНрддрдорд╛рди рдкреИрдирд▓ рдХреА рддреБрд▓рдирд╛ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╣реИ рдЬреЛ рдпрд╣ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреИрдирд▓ рджреГрд╢реНрдпрдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ)ред рдШрдЯрдХ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рдзреНрдп рд╣реИ | рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ async - 2.4 рдореЗрдВ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛, рдЕрдм рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдЪреЗрдВрдЬ рдХрд┐рдП рдЧрдП ItItHasBeenCheckedError рдФрд░ рдкреИрдирд▓ рдХреЛ рдЫрд┐рдкрд╛рдПрдВ рдФрд░ рдкрд╣рд▓реЗ рдХреНрд▓рд┐рдХ рдкрд░ рди рджрд┐рдЦрд╛рдПрдВ, рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдкрд░ред

4.1.3 рд╕реЗ 4.2.2 рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдореБрдЭреЗ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛ред
ChangeDetectionRef рдХрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди, рдФрд░ рддреНрд░реБрдЯрд┐ рдмрд┐рдВрджреБ рдкрд░ detectionChanges() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред

constructor(private cdr: ChangeDetectionRef) {
}

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 4.2 рдореЗрдВ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИред

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

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: https://github.com/angular/angular/issues/14321

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ ng-content рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ ng-content рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЕрдм ContentChangedAfter рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд░рддрд╛ рд╣реИред

4.1.3 рд╕реЗ 4.2.0 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдореБрдЭреЗ рд╡рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рддрд╛ рд╣реИ

рдореИрдВ рдмрдЧ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдВ

app-error.zip

рдлрд╝реЙрд▓реЛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ 4.1.3 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рд╣реИ) рдФрд░ рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдЬреЛ рднреА рд╣реЛ, рдпрд╣ 4.2 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ (рдпрд╛ рдЕрдЧрд▓реЗ) рдПрдХ рд╕рд╛рде рдПрдХ рдкреНрд▓рдВрдХрд░ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдЯреЛрд░ рдкрд░ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдпреВрдЖрдИ рдкрд░ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред UI рдЕрдкрдбреЗрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЕрдкрд╡рд╛рдж рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рд╣рдордордо,
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ 4.1.3 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд░реЛрд▓рдмреИрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ @jingglang рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЧрдП рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдп @tytskyiред рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ plunkr http://plnkr.co/edit/XAxNoV5UcEJOvsAbeLHT рдмрдирд╛рдпрд╛ред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред

@jingglang рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб 4.2.0 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдкрд░ (рдореЗрд░реЗ рд▓рд┐рдП) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдпрд╛ рдмрдЪреНрдЪреЗ рдХреЗ рдЙрддреНрд╕рд░реНрдЬрдХ рдШрдЯрдирд╛ рдХреЛ рдЙрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдмрджрд▓рдирд╛ рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рдмрдврд╝рд╛рддрд╛ рдирд╣реАрдВ рд╣реИ

@umens рдЖрдк

@alexzuza рдореИрдВ

рд╣рд╛рдп @umens рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ @alexzuza рдХреНрдпрд╛ рдХрд╣рддреА рд╣реИ: рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рдж рдЖрдк рдореВрд▓ рдШрдЯрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдХреЛрдб рд▓рдЧрднрдЧ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ: http://plnkr.co/edit/ksOdACtXScZKw3VRAYTm?p=preview (рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдЯрд┐рд╕ рдореИрдВрдиреЗ рд╕реЗрд╡рд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛)ред
рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд┐рдпрд╛? рд╕рдВрднрд╡рддрдГ рджреБрд░реНрдШрдЯрдирд╛ рдХреЗ рдХрд╛рд░рдг рдХреЛрдгреАрдп рдпрд╛ Rxjs рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣рд╛рдБ рдмрдЧ рдерд╛ред рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдкреНрд▓рдВрдХрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛?

рд╕реЗрдЯрдЯрд┐рдорд╛рдЙрдЯ рдХреЛ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЕрдм рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЙрдарддреА рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдлрд╝реАрд▓реНрдб рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИред

рдЪрд▓реЛ рдЗрд╕реЗ рд╡рд┐рдкрд░реАрдд рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ: рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдЙрдард╛рдИ рдЬрд╛рддреА рд╣реИ? рдЪреЗрдВрдЬ рдбрд┐рдЯреЗрдХреНрд╢рди рдХрд╛ рдкрд╣рд▓рд╛ рдЪреЗрдХ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп app.toolsConfig рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рддрдм рдпрд╣ <child-cmp> рдЬреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ app.toolsConfig рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдЬрд╛рдВрдЪ рдХрд╛ рджреВрд╕рд░рд╛ (рджреЗрд╡ рдореЛрдб рдХреЗрд╡рд▓) рдЪрд▓рд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ рд╕реНрдерд┐рд░ рд╣реИред рд▓реЗрдХрд┐рди рдмрдЪреНрдЪрд╛ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ app.toolsConfig app.toolsConfig рдмрд╛рдж рдирд╣реАрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рд╕рдм рдПрдХрд▓ "рдЯрд░реНрди", рдЪреЗрдВрдЬ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ "рдЪрдХреНрд░" рдХреЗ рджреМрд░рд╛рди рд╣реЛрддрд╛ рд╣реИред

рдареАрдХред рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рдХрдм рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реАред
рдкрд┐рдЫрд▓реЗ "рдХрд╛рдо рдХрд░ рд░рд╣реЗ" рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:
@ рдХреЛрдгреАрдп / *: 4.1.1 (рдХрдВрдкрд╛рдЗрд▓рд░-рдХреНрд▓рд╛рдИ рдХреЛ рдЫреЛрдбрд╝рдХрд░ -> 4.1.0)
rxjs: 5.3.1

@umens рдпрд╣рд╛рдБ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: http://plnkr.co/edit/kfoKmigXzFXwOGb2wyT1?p=previewред рдпрд╣ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдХреБрдЫ 3 рдкрд╛рд░реНрдЯреА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рдкреВрд░реНрдг рдкреНрд░рдЬрдирди рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ?

рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ред
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдпрд╛рд░реНрди рд╣реИред рдпрджрд┐ рдЖрдк рдЖрдЧреЗ рдЬрд╛рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: https://pastebin.com/msARLta1
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдореИрдВ 4.1.2 рд╕реЗ 4.2.3 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж "ExpressionChanged ..." рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рд╕реЗрд╡рд╛ рдореЗрд░реЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ ComponentA ComponentB рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред

4.1.2 , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдиреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛:

рдШрдЯрдХ рдШрдЯрдХ:

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

рдШрдЯрдХ рд╢реНрд░реЗрдгреА:

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

4.2.3 , рдореБрдЭреЗ "ExpressionChanged ..." рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП ComponentA рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

рдШрдЯрдХ рдШрдЯрдХ:

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

рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдореБрджреНрджрд╛ рдХреНрдпреЛрдВ рдмрди рдЧрдпрд╛ рд╣реИ, рдФрд░ *ngIf рд╕реЗ [hidden] рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХреНрдпреЛрдВред

рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ async рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
<div>{{ (obs$ |async).someProperty }}</div>
рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

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

рдлрд┐рд░ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдХреБрдЫ рдЧрд▓рддреА рдХреА рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрдЧ 4.2 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ...

рдореЗрд░реЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ @ рдХреЛрдгреАрдп / рд░рд╛рдЙрдЯрд░ рд╕реЗ рдЖрддреА рд╣реИ

рдореИрдВ рднреА рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдпрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд░рд╛рдЙрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯ рд╡рд┐рдлрд▓ рд░рд╣реАред рдореИрдВрдиреЗ рдЖрдЧреЗ рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдирд┐рдореНрди рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдЕрдВрддрд┐рдо рд╕реНрд░реЛрдд рдПрдХ рдкреИрдирд▓ рд╣реЗрдбрд░ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдкрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдЪреИрдиреНрдб рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

<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 рдЪрд▓рд╛рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд▓рдВрдХрд░ рд░реЗрдкреНрд░реЛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕реА рд╣реА рд╢рд┐рдХрд╛рдпрддреЗрдВ рдереАрдВ, рдЬреЛ рдХрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдереАред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмрдЧ рдХреЛ 4.2 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдпрджрд┐ рдмрдЧ рдХреЛ <4.2 рдкрд░ рддреНрд░реБрдЯрд┐ рдХреА рдХрдореА рдереА рдФрд░ рдпрд╣ 4.2 рдкрд░ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ред

рддреНрд░реБрдЯрд┐: ExpChanChangedAfterItHasBeenCheckedError
рдЙрдкрд╛рдп:
componentRef.changeDetectorRef.detectChanges ();

рдиреАрдЪреЗ рдореЗрд░реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ (рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдШрдЯрдХ):
ComponentsRef = viewContainerRef.createComponent (ComponentsFactory); // рдШрдЯрдХ рдмрди рдЧрдпрд╛
(ComponentsRef.instance) .рдбрд╛рдЯрд╛ = input_data; // рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШрдЯрдХ рдбреЗрдЯрд╛ рдпрд╣рд╛рдБ рдкрд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ
componentRef.changeDetectorRef.detectChanges (); // рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╣реЛрдЧрд╛

рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ Google "рдХрдВрдкреЛрдиреЗрдВрдЯ рд░реАрдл" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
componentRef.changeDetectorRef.detectChanges ();
рдШрдЯрдХ рдбреЗрдЯрд╛ / рдореЙрдбрд▓ рдХреЛ рдмрджрд▓рдиреЗ / рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рджред

рд╕рдорд╛рдзрд╛рди 2:
"This.dialog.open (DialogComponent)" рдПрдХ рд╕рдВрд╡рд╛рдж рдЦреЛрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред
рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЦреБрд▓реЗ рдбрд╛рдпрд▓реЙрдЧ рдХреЛрдб рдХреЛ рдПрдХ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдбрд╛рд▓рдХрд░ рдлрд┐рд░ рдЙрд╕ рдлрдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ () рд▓рдЧрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
OpenDialog () {
letRRef = this.dialog.open (DialogComponent);
}
ngOnInit (): рд╢реВрдиреНрдп {
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 {
}

рддреНрд░реБрдЯрд┐: рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдЪреИрдирдбреИрдЧ рдЖрдлреНрдЯрд░ рдЗрдЯрд╣реИрд╕рдмреИрдирдЪреЗрдХрдбреЗрд▓рд░: рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдмрджрд▓ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдкрд┐рдЫрд▓рд╛ рдорд╛рди: 'рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд'ред рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп: 'рдкрд░реАрдХреНрд╖рдг'ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╢реНрдп рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдЧрдВрджреЗ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╣реБрдХ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдХрд░ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдВред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЬреНрдЮрд╛рдд рдмрдЧ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдпрд╛, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рджред

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдЕрдЧрд░ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЬреБрдиреВрди рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдВрджреЗрд╢ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ! рдпрд╣ рдХреЗрд╡рд▓ рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрдм рдмреЙрдХреНрд╕ 'рдПрдирдЬреА рдЯреЗрд╕реНрдЯ' рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рд╣рд░ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рд▓ рд╕реЗрд╡рд╛ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдордЬрд╛рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рднреА рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдФрд░ ExpressionChangedAfterItHasBeenCheckedError + рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЦреЛрдЬ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред

рдореИрдВ рдПрдХ plnkr рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╛рдкрдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрд░реАрдм рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рддрдп рдХрд░рдирд╛ рдпрд╛ рдореЗрд░реА рдУрд░ рд╕реЗ рдХреЛрдИ рдЧрд▓рддреА)ред

рдореИрдВрдиреЗ рдЙрд╕реА рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдХрдЯ рдбрд╛рдЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдирдореВрдирд╛ рдРрдк рдмрдирд╛рдпрд╛, рдЬреЛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдРрдк рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд░рд╛рдЙрдЯрд░рд░реЗрдбрд░ рдЕрдВрддрд┐рдо рд╣реИред рдореЗрд░реА рд╣рддрд╛рд╢рд╛ рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рд╕реЗрдЯ рдХрд┐рдП рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рджреЗрдЦрд╛ред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рджреЛ рдРрдк рдЙрд▓реНрдЯреЗ рдХреНрд░рдо рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬ рд░рд╣реЗ рдереЗред

рдореЗрд░рд╛ UI reducer рджреГрд╢реНрдпрддрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕реНрд░реЛрдд рд╣реИ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ рд░рд┐рдбреНрдпреВрд╕рд░ рдХрд╛ рдХрдЯ-рдбрд╛рдЙрди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ:


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 рдПрдХреНрд╢рди рдЖрдЧ рдФрд░ рдирдпрд╛ рд░рд╛рдЬреНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ; рдлрд┐рд░ @ рдХреЛрдгреАрдп-рд░рд┐рдбрдХреНрд╕ / рд░рд╛рдЙрдЯрд░ :: UPDATE_LOCATION рдПрдХреНрд╢рди рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗрд╕ рд╣рд┐рдЯ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИред

рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдРрдк рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдСрд░реНрдбрд░ рдпрд╛ рдХреНрд░рд┐рдпрд╛рдПрдВ рдЙрд▓рдЯ рдЬрд╛рддреА рд╣реИрдВред @ рдХреЛрдгреАрдп-рд░рд┐рдбрдХреНрд╕ / рд░рд╛рдЙрдЯрд░ :: UPDATE_LOCATION рдХреНрд░рд┐рдпрд╛ рдкрд╣рд▓реЗ рдЖрдЧ рд▓рдЧрд╛рддреА рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреА рд╕реНрдерд┐рддрд┐ рд▓реМрдЯрд╛рддреА рд╣реИред рдлрд┐рд░ LIST_INGREDIENTS рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИ, рдирдИ (рдкрд░рд┐рд╡рд░реНрддрд┐рдд) рд╕реНрдерд┐рддрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдЧреВрдВрдЧрд╛ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ?

(рдПрдХ рдлреБрдЯрдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ 4.1.3 рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХреА ... рдФрд░ рдпрд╣ 'рд╕рд╣реА' рдХреНрд░рдо рдореЗрдВ рд░рд┐рдбреНрдпреВрд╕ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рднреА рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рддреН, рд╕реНрдерд╛рди рдкрд░рд┐рд╡рд░реНрддрди рд╕реВрдЪреА рд╕рд╛рдордЧреНрд░реА рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЗрд╕реАрд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 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 рдорд╛рддрд╛ рдкрд┐рддрд╛ рдХреА (рдЬрд╣рд╛рдВ рдпрд╣ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдЧрдпрд╛ рдерд╛)ред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдпрд╣ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ рди рдХрд┐ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рдеред рдореИрдВрдиреЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ <ng-content></ng-content> 4.2.4 рдореЗрдВ ExpressionChangedAfterItHasBeenCheckedError рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

рд╕рд╛рдордЧреНрд░реА 2 рдЗрдирдкреБрдЯ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛ред рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА

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

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд▓рдВрдХрд░ рдХреЛ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ ExpressionChangedAfterItHasBeenCheckedError рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреА рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ Angular 4.2.x рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдИ рд╣реИрдВред

рдореИрдВрдиреЗ рдкреИрд░реЗрдВрдЯ рдШрдЯрдХ рдХреЗ ngAfterViewInit ChangeDetectorRef detectChanges() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рднреА ContentChild рдХрд╛ рдорд╛рди рдмрджрд▓рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рд░рд▓ рдкреНрд▓рдВрдХрд░ рдмрдирд╛рдпрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореЗрд░реЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд░рд▓ рдкреНрд▓рдВрдХрд░ рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдШрдЯрдХ рдХреЗ рдмрдЬрд╛рдп рдореВрд▓ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдФрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред

@saverett рдореБрдЭреЗ рдЖрдкрдХреА рджреЗ рд░рд╣рд╛ рд╣реИ

@ рдЬреЗрдорд╛рдЗрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рдкреНрд▓рдВрдХрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдерд╛ (рдХреЛрдб рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реЗ рд▓рдкреЗрдЯрдХрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ ContentChild setTimeout , plunker рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ )

@ рдЬреИрдорд┐рд╕рд┐рдХ рдиреЗ рд╕рд┐рд░ рдКрдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛ред рдХреЛрдгреАрдп / рдЬрд╝реЛрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред # 832ред рдореИрдВрдиреЗ рдЕрдм рддрдХ рдХреЗ рд▓рд┐рдП рдЬреЛрди .js рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 0.8.12 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдирд╡реАрдирддрдо рдЬрд╝реЛрди рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд▓рдВрдХрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@matkokvesic рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдХреЛрдгреАрдп v4.1.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ

@ рдЬреЗрдорд╛рдЗрдХ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдпрд╣ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИред рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ContentChildren рдореЗрдВ ngAfterViewInit рдареАрдХ рдкрд╣рд▓реЗ рдХреЛрдгреАрдп 4.2.6 рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореИрдВрдиреЗ https://github.com/angular/angular/issues/17572#issuecomment -311589290 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдВрдХрд░ рдмрдирд╛рдпрд╛

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

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ changeDetection: ChangeDetectionStrategy.OnPush рдФрд░ this.changeDetector.markForCheck(); рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рд╣реИ

@touqeershafi рдпрджрд┐ рдЖрдк this.changeDetector.markForCheck(); рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдпрд╣ рдЕрднреА рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рд╣реИ, рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@istiti рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЪрд┐рдВрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдмрдЧ url рдХреЗ рд╕рд╛рде TODO рдЬреЛрдбрд╝рд╛ рд╣реИред

рдпрд╣ рдЕрднреА рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рд╣реИ, рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ @rwngallego рд╕реЗ рд╕рд╣рдордд 4.2.x рдЕрдкрдбреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп / рдПрдирдЬреА-рдХрдВрдЯреЗрдВрдЯ рд╕реНрдЯреЗрд▓реА рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛ рдЬреЛ @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();
});
    }

рдЕрдм рдпрд╣ рдПрдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛ рдпрд╣ рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЛрдгреАрдп рдХреЛ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП ...

@sulhome ... рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд╡рд╛рджрд╛ @Input рдмрдЪреНрдЪреЗ рдШрдЯрдХ рдкрд░ ... рд╕реАрдбреА рдЪрдХреНрд░ рдХреЗ рджреМрд░рд╛рди рдФрд░ рджреЗрд╡ рдореЛрдб рдореЗрдВ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣реА рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реИред

рд▓рд╛рдЗрди this.cdRef.detectChanges(); рджреВрд╕рд░рд╛ рд╕реАрдбреА рдЪрдХреНрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдкреБрд╖реНрдЯрд┐ рдХреЗ рдмрд╛рдж рдпрд╣ рд░рд╕реАрд▓рд╛ рдФрд░ => рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред

рддреЛ рд╕рдм рдХреБрдЫ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╕рд╣реА рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдЧрд╣рд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: https://hackernoon.com/everything-you-need-to-know-about-the-expressionchangedafterithasbebeencheckederror-error-3fd9ce7db4

@ mlc-mlapis рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдЗрд╕реЗ this.cdRef.detectChanges(); рдЬреЛрдбрд╝рдХрд░ рд╕рд╣реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдирд╣реАрдВ рд╣реИ?
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдмрдЪреНрдЪреЗ рдкрд░ ngOnChanges рд╕реБрдирдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ @Input рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИ? рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ ngOnChanges рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

@sulhome рд╣рд╛рдБ, this.cdRef.detectChanges(); рд╡рд╣ рд╣реИ рдЬреЛ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА 2 рд╕реАрдбреА рд╣реИрдВ ... рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рдФрд░ рдХреИрд╕реЗ OnPush рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрд░рд┐ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдПрдХ рдФрд░ рд╕реАрдбреА рдЪрдХреНрд░ред

рдпрджрд┐ рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ dataservice.getData http рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдЙрд╕ рд╕реЗрд╡рд╛ рдореЗрдВ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рд╕реЗ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ рдЬрдм рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдмрдЪреНрдЪрд╛ рдЙрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП @ghetolay , рдХреБрдЫ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП # 18129 рджреЗрдЦреЗрдВ рдЬреЛ рдореИрдВрдиреЗ рдЦреЛрд▓рд╛ рдерд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рдореБрдЭреЗ @Output рдХреЗ рд╕рд╛рде рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред

рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдШрд░ рдкрд░

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 рдХреЛ рддрдм рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдбреНрд░реИрдЧрд╕реНрдЯрд╛рд░реНрдЯ рдФрд░ рдбреНрд░реИрдЧреЗрдВрдбтАжред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ
ExpressionChangedAfterItHasBeenCheckedError: рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИред рдкрд┐рдЫрд▓рд╛ рдорд╛рди: 'рд╕рддреНрдп'ред рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп: 'рдЧрд▓рдд'ред

рдпрд╛ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓ / рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ?

рек.реи.x рдФрд░ рек.рей.реж рдореЗрдВ рд╕рдорд╛рди рдЕрдВрдХ рд▓реЗрдХрд┐рди рек.рез.x рдирд╣реАрдВред

рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдЙрди рдорд╛рд░реНрдЧреЛрдВ рдкрд░ рд╣реЛрддреА рд╣реИ рдЬреЛ ng-template ред

рд╕рдорд╛рдзрд╛рди: ngAfterViewInit рдореЗрдВ рд╕рднреА рдХреЛрдб рдбрд╛рд▓рдХрд░ setTimeout рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреА (рдзрдиреНрдпрд╡рд╛рдж / рдХреНрд░реЗрдбрд┐рдЯ @jingglang рдХреЗ рд▓рд┐рдП)ред

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

@Wernerson , рд╕реЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ 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 ред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рднреА рдЪрд┐рдВрддрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рдпрд╛ рдЦрддрд░рдирд╛рдХ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдЕрднреА рднреА рдПрдВрдЧреБрд▓рд░ 4.2.6 рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдЪреВрдВрдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдбреАрдмрдЧ рдмрд┐рд▓реНрдб рдореЗрдВ рд╣реЛрдЧреАред

рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕реЗ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ () рдореЗрдВ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ ...

setTimeout() рдЕрдХреНрд╖рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдПрдХ рдирдП рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдЪрдХреНрд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЬрдмрдХрд┐ detectChanges() рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдШрдЯрдХ AFAIK рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реА рдЯреАрдо рдХреЛ рдПрдХ рдЧрд▓рддрдлрд╣рдореА рдереА рдХрд┐ ngOnInit рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред рдбреЙрдХреНрд╕ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ

ngOnInit() : рдПрдВрдЧреБрд▓рд░ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджреЗрд╢ / рдШрдЯрдХ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдбреЗрдЯрд╛-рдмрд╛рдЙрдВрдб рдЧреБрдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ ngOnChanges () рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджреЗрд╢ / рдШрдЯрдХ рдХреЗ рдЗрдирдкреБрдЯ рдЧреБрдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рд╣рдо ngOnInit рд╕реЗ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ (рдЬреЛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддреЗ рд╣реИрдВ) рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд░рд╣реЗ рдереЗред рд╣рдорд╛рд░реА рд╕рджрд╕реНрдпрддрд╛рдПрдБ рд╕рдордХрд╛рд▓рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИрдВ; рд╡реЗ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рдордп рдЖрдЧ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП "рдХреЛрдгреАрдп рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рдж ... рдирд┐рд░реНрджреЗрд╢ / рдШрдЯрдХ рдХреЗ рдЗрдирдкреБрдЯ рдЧреБрдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ", рд╣рдо рддреБрд░рдВрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рд░рд╣реЗ рдереЗред рдпрд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд▓рдВрдХрд░ рдЪрд┐рддреНрд░рдг рд╣реИ рдЬреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЯреВрд░ рдСрдл рд╣реАрд░реЛрдЬ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЕрдВрддрддрдГ http рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ , рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рдЙрд▓рдЭрди рдХрд╛ рд╕реНрд░реЛрдд рд╣реИред

рдЕрдм рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╣рдорд╛рд░реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░ рд░рд╣рд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреА рд╡реИрд▓реНрдпреВ рддреБрд░рдВрдд рд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПред рдЗрд╕ рдереНрд░реЗрдб рдХреЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ, рдмрд╛рдж рдореЗрдВ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ, рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдмрддрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред

@Maximusk рдиреЗ рдЬреЛ рд▓реЗрдЦ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдЕрд╡рд╢реНрдп рдкрдврд╝реЗрдВ : ExpressionChangedAfterItHasBeenCheckedError рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╛рдирдирд╛ рд╣реИ ред

рдпрджрд┐ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреЛрдгреАрдп рдбреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕ рд╕рдм рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

@Maximusk рдиреЗ рдЬреЛ рд▓реЗрдЦ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдЕрд╡рд╢реНрдп рдкрдврд╝реЗрдВ: ExpressionChangedAfterItHasBeenCheckedError рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╛рдирдирд╛ рд╣реИ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж

@adamdport

рдХреНрдпрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдмрд╛рд▓ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ViewChildren @ContentChildren рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рддрдХ ngAfterViewInit () рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрдм рддрдХ рдмрдЪреНрдЪреЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ?

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рдкреБрд╖реНрдЯрд┐ рдмрдЧ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ:
https://github.com/angular/angular/issues/15634

рд╕рдорд╕реНрдпрд╛ @saverett рд╕рдВрдмреЛрдзрд┐рдд рд╕рд╣реА рд╣реИ, *ngIf рдХрд╛ рдЙрдкрдпреЛрдЧ рддреНрд░реБрдЯрд┐ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред

*рджреЗрдЦ рд░рд╣реЗ...

рдпрд╣ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдХреЛрдгреАрдп рд╕рд╛рдордЧреНрд░реА рд╕рдВрд╡рд╛рдж рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕рдВрд╡рд╛рдж рдореЗрдВ this.myDataInput = Object.assign({}, dialogDataInput) рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА this.myDataInput = dialogDataInput; рдФрд░ рдлрд┐рд░ this.myDataInput.isDefault = !this.myDataInput.isDefault; рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ (рдбрд╛рдпрд▓реЙрдЧ) рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдкреИрд░реЗрдВрдЯ рдШрдЯрдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓реЗрдВ [рд╡рд┐рд╢реЗрд╖рддрд╛]

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдмрдЧ рд╣реИ?
рдХреНрдпрд╛ ngOnInit рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХреЛрдб рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдПрдХ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛) рд▓реЗ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдбрд╛рд▓реА рдЧрдИ рд╣реИ ...

@ рд╕рд╣рдХрд░реНрдореА ред рдХреНрдпрд╛ рдЖрдкрдХреЗ html рдореЗрдВ * ngIf рд╣реИ? рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХрд┐ ngOnInit рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЪреАрдЬреЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛ рд░рд╣реА рд╣реИрдВ, рд╕реЛрд▓рд╛рдВрдЧ, * ngIf рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред "NgIf" рдФрд░ рдХрд╕реНрдЯрдо рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

@ j-nord рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкрдврд╝реЗрдВрдЧреЗ, рддреЛ рдЖрдк рдЬрд╛рдиреЗрдВрдЧреЗ рдХрд┐ timeout рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

@ j-nord / @dgroh рдореИрдВрдиреЗ рд╡рд╣реА рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдПрдХ рдПрдирдЬреА-рд╣рд┐рдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдПрдирдЬреАрдЖрдИ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ рдерд╛?

@Wernerson рд╣рд╛рдБ, рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдмрдЧ рд╣реИ: https://github.com/angular/angular/issues/15634

@ mawo87 рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЫрд┐рдкрд╛ рд╣реБрдЖ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ DOM рд╕реЗ рдПрд▓рд┐рдореЗрдВрдЯ рдирд╣реАрдВ рд╣рдЯрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рдерд╛ рдФрд░ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рд╕рдорд╛рдзрд╛рди рднреА рдерд╛ред

@ mawo87
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдвреВрдВрдврдирд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрд░рд░ рдореИрд╕реЗрдЬ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддрд╛ рд╣реИред @ рднрд╛рд╖рд╛ рдЯреАрдо : рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЪрд░ рдХрд╛ рдирд╛рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдмрдбрд╝реЗ рдорд╛рд╕реНрдХ рдФрд░ рд╡реЗрдмрдкреИрдХ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╣ рдХрдорд╛рдВрдб рдорд┐рд▓рд╛ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлреЙрд▓реЛ рд▓рд╛рдЗрди рдореЗрдВ рдХрдорд╛рдВрдб рдорджрдж рдХрд░реЗрдЧрд╛:

this.cdr.detectionChanges();

19. рд╕рд┐рдВрджреВрд░ рд╕реЗ рд╕рд┐рдВрджреВрд░ 928 рд╕реЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ

рдзрдиреНрдпрд╡рд╛рдж @dgroh рдФрд░ @ j-nord
@ j-nord рдореИрдВ рдбрд┐рдЯреЗрдХреНрд╢рдирдЪреЗрдВрдЬ рд╡рд┐рдзрд┐ рдХреЛ рднреА рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рдереА:
https://hackernoon.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдПрдХ PageTitle рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдЬреИрд╕реЗ рд╣реА рдмрд╛рд▓ рдШрдЯрдХ рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ PageTitle рдХреЛ рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрднрд┐рднрд╛рд╡рдХ рдХреЛ рдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ 4.1.x рдореЗрдВ рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 4.2x рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдЪреЗрдВрдЬ рдХрд┐рдП рдЧрдП ItHasBeenCheckedError рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ рдЕрднреА рднреА рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рддреИрдирд╛рдд / рдЙрддреНрдкрд╛рджрди рдмрд┐рд▓реНрдб (рджреВрд╕рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдЪрдХреНрд░ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг) рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдореЗрд░реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рд▓ рд╣реИред

рдореИрдВ рдЕрднреА рднреА рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдБ рдХрд┐ рдЙрдкрдпреБрдХреНрдд (рдЕрд▓реНрдкрд╛рд╡рдзрд┐) рдлрд┐рдХреНрд╕ рдХреНрдпрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдШрдЯрдХ рд╕рджрд╕реНрдпрддрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд╣реИрдВ, рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдЕрдкрдбреЗрдЯ ngOnInit рдореЗрдВ рд╣реИрдВред

рдореИрдВрдиреЗ, рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ ... тАЩрдкреЛрд╕реНрдЯ рдкрдврд╝рд╛ рд╣реИ, рдЬреЛ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@alignsoft рдЕрдЧрд░ рдЖрдк ngOnInit рдореЗрдВ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдкреЗрдЬреЗрдЯрд▓ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╡реИрдз рд╣реИ ... рдЙрд╕ рд▓реЗрдЦ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@alignsoft рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реИрдз рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреА рд╡реИрдзрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ ... рдХреНрдпрд╛ рдпрд╣ рдорд╛рдирдХреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / рд╣реЗрд░рдлреЗрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрд╡ рдХреЛ "рдЪреЗрддрд╛рд╡рдиреА" рд╣реИ?

рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ / рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде @ViewChild рдФрд░ @ContentChild рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП DetChanges () рд╕реЗ рдЕрдзрд┐рдХ рдФрд░ рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВ ...

@rolandoldengarm рдореИрдВрдиреЗ рдкреИрд░реЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдФрд░ рдЪрд╛рдЗрд▓реНрдб рдШрдЯрдХреЛрдВ рдореЗрдВ AfterViewInit рдореЗрдВ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдХреНрдпрд╛ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдЪрдХреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдЧ рд╣реИ?

рдХреГрдкрдпрд╛, рдпрд╣рд╛рдБ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрддреНрддрд░ рджреЗрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ ...

рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдирд╛ред рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг https://github.com/angular/angular/issues/17572#issuecomment -315096085 рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ AfterContentInit рдХреЗ рдмрдЬрд╛рдп AfterViewInit рдЬрдм рдШрдЯрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк ContentChildren рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ред

рдпрд╣рд╛рдБ AfterContentInit рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ plnkr рдФрд░ рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ: http://plnkr.co/edit/rkjTmqclHmqmpuwlD0Y9?p=preview

@ рдЬреЗрдорд╛рдЗрдХ I рдиреЗ AfterViewInit рд╕реЗ AfterContentInit рдмрджрд▓рд╛, рдлрд┐рд░ рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ OnInit рдХреЗ рдЕрдВрджрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ OnInit рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Angular рдЬреАрд╡рдирдЪрдХреНрд░ рд╕рд╣реА (right?) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХреА рдУрд░ рд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдмрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдП ..? : рдбреА

рдЖрдк рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП @Wernerson ngOnInit рдЬрдм рддрдХ рдбреЗрдЯрд╛ рд╣реИ рдХрд┐ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдирд╛ рддрд░реНрдХ ngAfterContentInit рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдЙрд╕реЗ рд╕рд╛рдордЧреНрд░реА рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред

@JSMike рдиреЗ рдорджрдж рдирд╣реАрдВ рдХреА, рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл ngAfterContentInit рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ (рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реВрдВред

@ рдХреНрдпрд╛ рдЖрдк рдПрдХ plnkr рдЙрджрд╛рд╣рд░рдг рд╣реИ?

StackBlitz рдХреЗ рд╕рд╛рде рдореВрд▓ рдирдореВрдирд╛
рдПрдХ рдмрдЪреНрдЪрд╛ рдШрдЯрдХ рдПрдХ рдШрдЯрдирд╛ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореВрд▓ рдШрдЯрдХред
Js рдХрдВрд╕реЛрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'undefined'. Current value: 'hello world'.

рдкрддрд╛ рдЪрд▓рд╛, ngAfterContentInit рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдмрдЪреНрдЪреЗ рд╕реНрдерд┐рд░ рд╣реИрдВ, рдпрд╣ рддрдм рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдЬрдм *ngFor http://plnkr.co/edit/rkjTmqclHmqmpuwitD0Y9?p=preview рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪреНрдЪреЗ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ

@soldiertt рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИрдЪреЗрдВрдЬ () https://stackblitz.com/edit/angular-qfu74y

@ рдЬреЗрдорд╛рдЗрдХ рдпрджрд┐ рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ ngAfterView рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: https://stackblitz.com/edit/angular-bdwmgf

@soldiertt рдЬреЛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдЬреЗрдорд╛рдЗрдХ рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рд╕реЗрд╡рд╛рдУрдВ, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдПрдХ рдкреНрд▓рдВрдХрд░ рдореЗрдВ рдмрдЧ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛: /

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 рд╕рджрд╕реНрдпрддрд╛рдПрдБ рд╣реЛрдВрдЧреАред рдФрд░ рдЕрдЧрд░ рдореИрдВ 2 рд╣рд┐рдВрдбреЛрд▓рд╛ рд╣реИ рддреЛ рджреЛрдЧреБрдирд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ?! рд╕рд╣реА?

рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд╣реАрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдкрд░ рдХреБрдЫ рдЧреБрдг рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдРрд╕реЗ рдЧреБрдг рдЬрд┐рдиреНрд╣реЗрдВ AfterContentInit рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ... рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдЬрдм рд╣рдо 1 рдпрд╛ 2 рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡рд╣, рдмрд▓реНрдХрд┐ 50 рдпрд╛ 100 (рдЬреИрд╕реЗ рд╣рд┐рдВрдбреЛрд▓рд╛ рдореЗрдВ) рджрд╕рд╡реАрдВ рдпрд╛ рд╕реИрдХрдбрд╝реЛрдВ рд╕рджрд╕реНрдпрддрд╛ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реЛрдВрдЧреЗред

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдгреАрдп рдХрд╛ рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╣рд╛рдБ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЦреЛрдЬрд╛ рд╣реИ?

PS рдореИрдВрдиреЗ ChangeDetectorRef рдХрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдФрд░ рд╣рд┐рдВрдбреЛрд▓рд╛ рдШрдЯрдХ рдФрд░ рдЖрдЗрдЯрдо рдШрдЯрдХ рджреЛрдиреЛрдВ рдкрд░ detach() рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ, рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ ... рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ "_screw рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреГрдкрдпрд╛, рд╕реБрдВрджрд░ рдХреГрдкрдпрд╛: рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рди рд▓рдЧрд╛рдПрдВ _" ... рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рдлреЗрдВрдХ рджреА рдЧрдИ рд╣реИ! рддреЛ, detach() рдкрджреНрдзрддрд┐ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ?

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

setTimeout() рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдПрдХ рд╣реИрдХ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рд╣реА рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: ngAfterViewInit рджреМрд░рд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрджрд▓рдирд╛ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдиреЗ рдХреНрдпреЛрдВ рдмрд┐рдирд╛ рдЬрд╛рджреВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдз рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рдЬрд╣рд╛рдВ setTimeout() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реИред

@ghetolay рдХреНрдпрд╛ рдпрд╣ рдШрдЯрдХ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП

@fugwenna

рдХреНрдпрд╛ рдШрдЯрдХ (рдПрд╕) рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рддреЛрдбрд╝рдирд╛ рд╣реИрдХрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдореИрдВ рдЙрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдЬреАрд╡рдирдЪрдХреНрд░ рд╕реЗ рдмрд╛рд╣рд░?

рдХреЛрдгреАрдп рд╣рд░ рдмрд╛рд░ рд╕реАрдбреА рдХрд╛ рдПрдХ рджреМрд░ рдЪрд▓рд╛рдПрдЧрд╛ рдЬрдм рдПрдХ async рдШрдЯрдирд╛рдУрдВ рд╣реЛрддреА рд╣реИ (рдбреЛрдо рдШрдЯрдирд╛, xhr, setTimeout рдЖрджрд┐ ..), рдЙрд╕ рд╕реАрдбреА рдХреЗ рджреМрд░рд╛рди рдпрд╣ рджреГрд╢реНрдп рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдЧрд╛ред ngAfterViewInit рд╣реБрдХ рдЙрд╕рдХреЗ рдмрд╛рдж рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рдФрд░ рд╕реАрдбреА рдЪрд▓рд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рди рд╣реЛ рдФрд░ рдпрд╣ рддрдм рддрдХ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рди рд╣реЛ рдЬрд╛рдП рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕ рдШрдЯрдирд╛ рди рд╣реЛ рдЬрд╛рдПред setTimeout() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдн рдирдЧрдгреНрдп рд╣реИрдВред

@ghetolay рдореИрдВ @JSMike рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЧрдП рдХреБрдЫ рдЕрдиреНрдп рд╕реВрддреНрд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд░рд╣рд╛ рд╣реВрдВ:

@matkokvesic рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдХреЛрдгреАрдп v4.1.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реБрдХ "рд╕реНрдХрд┐рдк" рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛?

@ghetolay @fugwenna рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ detach() рдХреА рд╡рд┐рдзрд┐ ChangeDetectorRef ? рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдХреНрдпрд╛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддреНрд░реБрдЯрд┐ рдХреЛ рднреА рдЦрддреНрдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдпрд╛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ "рд╕реНрд╡рддрдВрддреНрд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдгреАрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдЕрдЧрд░ рд▓реЛрдЧ рдЕрднреА рднреА "ExpressionChangedAfterItHasBeenChecked" рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рд╣реИ ... рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреЛрдгреАрдп рдХреЛ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИрдВред рд╡рд┐рдХрд▓рд╛рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗред рдореВрд▓ рд░реВрдк рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реЗ рдкреЗрдбрд╝ рдкрд░, рдореВрд▓ рдШрдЯрдХ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдпрд╛ рдерд╛ред

рдореИрдВ рдпрд╣рд╛рдВ рдереЛрдбрд╝рд╛ рдЦреЛ рдЧрдпрд╛ рд╣реВрдВ, рдореЗрд░реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рджреЗрд╡ рдореЛрдб рдореЗрдВ рдЕрдкрд╡рд╛рдж рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдХреБрдЫ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдХрд░реВрдВрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдХрдВрдЯреНрд░реЛрд▓ рд╡реИрд▓реНрдпреВ рдПрдХреНрд╕реЗрд╕рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдкрд┐рдХ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдШрдЯрдХ рдХреЛ рдПрдХ рдЦрд╛рд▓реА рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдлрд╝реАрдб рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдбреЗрдЯрдкрд┐рдХрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИред рдмреЗрд╢рдХ рдмрдЪреНрдЪреЗ рдЕрдкрдиреЗ рдЗрдирд┐рдЯ рдХреЗ рджреМрд░рд╛рди рдореЙрдбрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣реА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ! рдореИрдВ рдПрдХ рдЖрд░рдВрднрд┐рдХ рдореЙрдбрд▓ рд╡рд╛рдкрд╕ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЕрднрд┐рднрд╛рд╡рдХ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рдХрд░рддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрдЯрдкрд┐рдХрд░ рд╣реИ рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░реВрдВрдЧрд╛? рдХреЙрд▓ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рдЯреНрд░рд┐рдЧрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдлрд┐рд░ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ? ChangeDetectorRef рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪреАрдЬрд╝? рд▓реЗрдХрд┐рди рдпрд╣ рд╕реЗрд╡рд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдореВрд▓реНрдп рдХреЗ рдХреЗрд╡рд▓ рддрдХрдиреАрдХреА рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред

@fugwenna рдореЗрд░реА рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдпрд╣ рдереА рдХрд┐ рдпрд╣ 4.1.3 рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЛрдгреАрдп рдЯреАрдо рдХреЗ рдЭрдВрдХрд╛рд░ рдкрд░ рдХрд┐рд╕реА рдХреЛ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЗрдирд┐рдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ setTimeout рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрд╝реЛрди рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рде рдореЗрдВ рд▓реЗрдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@ kavi87 рддреЛ рдпрд╣ stackoverflow рд╕рд╡рд╛рд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдореИрдВ рдЬрд░реВрд░рдд рджреЗ рджреА рд╣реИред рдореЗрд░реЗ рдмрдЪреНрдЪреЗ рдШрдЯрдХ async рдореЗрдВ рдШрдЯрдирд╛ emitter рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдереА:
new EventEmitter(true)

109 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдХрд┐рд╕реА рднреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рд╢рд╛рдВрдд рд╣реИред

рдЬрдмрдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рд╕реНрд╡рдпрдВ-рд╕рд╣рд╛рдпрддрд╛ рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЧ рд╣реИ, рдпрд╛ рдХреЗрд╡рд▓ 4.2.x рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЗрд╕ рддрд░рд╣ рдпрд╣ рдПрдХ рдорд╛рдореВрд▓реА рд░рд┐рд▓реАрдЬ рдирд╣реАрдВ рд╣реИ?)

@MrCroft
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдХреНрд╖рдо рд╣реИ рдиреАрдЪреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП / рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ @Jikeike рдФрд░ @rosslavery рд╕реЗ рдмрд╣реБрдд рдХрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ 4.2x рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпреЛрдВ рдЖрдпрд╛, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░реЛрдХ-рдЯреЛрдХ рдХреЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ... рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдХрд╛ рдПрдХ рдФрд░ рдЧреВрдврд╝ рдЯреБрдХрдбрд╝рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд┐рдХрд╛рд╕ рдореЛрдб, рдЬреЛ рд▓рдЧрднрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ (?)

Im рдореЗрд░рд╛ AppComponent рдореИрдВ рдПрдХ 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 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдЪреЗрдВрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ItHasBeenCheckedError рдЬрдм рд╕рд░реНрд╡рд┐рд╕ рд╡реНрдпрд╕реНрдд рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рд╕рд░рд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрдзрд╛рд░рдг рд╣реИ?

@ emazv72 ... рдХреНрдпрд╛ рдпрд╣ рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬрд╝ / рдкреНрд▓рдВрдХрд░ рдбреЗрдореЛ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ? https://stackblitz.com/edit/angular-2p2h9s?file=app%2Fapp.component.ts рдпрд╛ https://plnkr.co/edit/RPOxSVnXvM1TqKp.peSY?p=preview

@ mukunku рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдХрд┐ред

@ mlc-mlapis рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдкреНрд▓рдВрдХрд░ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдореЗрд░рд╛ рдХреЛрдб рдмрд┐рд▓реНрдХреБрд▓ https://plnkr.co/edit/uUT7tiM5BKPIy2upJPhb?p=preview рд╣реИ

рд▓реЗрдХрд┐рди рдкреНрд▓рдВрдХрд░ рдореБрджреНрджреЗ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо 4.x рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж

рд╣рд╛рдп рд╕рдм - рдпрд╣рд╛рдБ рджреЗрд░реА рдкрд░ рдорд╛рдлреАред

рддреЛ - рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдореИрдХреЗрдирд┐рдХреНрд╕ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред

@saveretts рдХрд╛ рдкреНрд▓рдВрдХрд░ рдЗрд╕ рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж!) - https://plnkr.co/edit/fr7rTNTCgEhHcbKnxAWN?p=preview

Tldr рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдгреАрдп рдиреЗ рд╣рдореЗрд╢рд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ - рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ (рдпрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ -> рдмрдЪреНрдЪрд╛), рдПрдХрд▓ рдкрд╛рд╕ рдореЗрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕:


@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- рд╕реНрдЯрд╛рдЗрд▓ рд╕реНрдерд┐рд░ рд░рд╣рдиреЗ рддрдХ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ), рдорд╛рддрд╛-рдкрд┐рддрд╛ рдмрдВрдзрди (* рдПрдирдЬреАрдЖрдИрдПрдл, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХреА рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ (!)

рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЛ рджреЛ рдмрд╛рд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ - рджреВрд╕рд░реА рдмрд╛рд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдирд╣реАрдВ рдмрджрд▓реА рдЧрдИ рд╣реИ (рдЬреЛ рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛), рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред рдЖрдк рд░рд┐рдкреНрд░реЗрдЬреЗрдВрдЯ рдореЗрдВ enableProdMode() рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://plnkr.co/edit/GGEzdxK1eHzHyGiAdp56?p=previewред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдбрд╛рд▓реА рдЧрдИ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реАрдбреА рдПрдХреНрд╕ 2 рдирд╣реАрдВ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдПрдХ рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдмрдЪреНрдЪреЗ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди * рдПрдирдЬреАрдЖрдИрдПрдл рдирд╣реАрдВ), рдЬреЛ рдПрдХ рдмреИрдб рдерд┐рдВрдЧ рд╣реИред

рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ, рд░рд╛рдЙрдЯрд░ рдиреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдерд╛ - рдпрд╣ рдЕрдХреНрд╖рдо рдерд╛ рдФрд░ рдПрдирд┐рдореЗрд╢рди рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдерд╛, рдЦрд╛рд╕рдХрд░ рдЬрдм рд░рд╛рдЙрдЯрд░-рдЖрдЙрдЯрд▓реЗрдЯ рдПрдирдЬреАрдЖрдИрдПрдлрдПрд╕ рдФрд░ рдРрд╕реА рдЪреАрдЬреЛрдВ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╣реЛрддреЗ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рддрдп рд╣реЛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЕрдм рддрдХ рдЧрд▓рдд рдХреЛрдб рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рд╣реИ * рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдПрдХ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛-рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдЖрдо рддреМрд░ рдкрд░, рдХреЛрдб рдЬреЛ рдЗрд╕ рдПрдХрддрд░рдлрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ repro рдХрд░рддрд╛ рд╣реИ) рдЧрд▓рдд рд╣реИ ред рд╣рд╛рд▓рд╛рдВрдХрд┐ - рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЪрд╛рд╣рддреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдВрдЧреБрд▓рд░ рдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕реЗрдЯрдЕрдк рд╣реИ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬреЛ рд░реВрдЯ рдШрдЯрдХ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЯреЙрдк-рдбрд╛рдЙрди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛)ред рдХреЙрд▓рд┐рдВрдЧ setTimeout рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ - https://plnkr.co/edit/IoKMxEOlY9lY9LcWwFKw?p=preview рджреЗрдЦреЗрдВ

рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗ!

@robwormald рдпрд╣реА рддреНрд░реБрдЯрд┐ рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рднреА рд╣реЛ рд░рд╣реА рдереАред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ ContentChildren рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ AfterContentInit рдХреЗ рджреМрд░рд╛рди рдмрдЪреНрдЪреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдШрдЯрдХ рдореЗрдВ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдПрдХ cdr.detectChanges() рдХреЛ рдПрдХ init рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп init рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ? рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИ ред

@robwormald

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ @JSMike рдЗрд╕ рдЖрдХрд▓рди рдореЗрдВ рд╕рд╣реА рд╣реИ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рджреМрд░рд╛рди рдбрд╛рд▓реА рдЧрдИ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ-рддрд░рдлрд╝рд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд┐рд╕реА рдкрд╛рд▓рдХ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ-> ContentChild (ren) рдФрд░ ViewChild (ren) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрдЪреНрдЪрд╛ред

рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдХрд╣рд╛ рд╣реИ , рдпрд╣ рддреНрд░реБрдЯрд┐ "рдЪреЗрддрд╛рд╡рдиреА" рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдПрдХрддрд░рдлрд╛ рдкреНрд░рд╡рд╛рд╣ "рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕" рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдХрд┐рд╕реА рднреА рдЖрд╡реЗрджрди рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдореЛрдб (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛) рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ?

@fugwenna рдирд╣реАрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдпрдерд╛ рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджреГрд╢реНрдп рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд░реЙрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛ рдирдореВрдирд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рд╕рдм рдмрддрд╛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЙрдХреНрд╕ рд╕реЗ рдпрд╣ рдЙрджреНрдзрд░рдг рд╣реИ

рдХреЛрдгреАрдп рдХреЗ рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рдирд┐рдпрдо рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдШрдЯрдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд░рдЪрдирд╛ рдХреЗ рдмрд╛рдж рдпреЗ рджреЛрдиреЛрдВ рд╣реБрдХ рдЖрдЧ рд▓рдЧрд╛рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд╕реНрдХрд┐рдВрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред setTimeout рдпрд╣рд╛рдВ рдЕрдиреБрдХреВрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ (рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп) 4ms рджреЗрд░реА рд╕реЗ рдЖрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ Promise.resolve().then(() => Assignment = here)

рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдПрдХ рдХрджрдо рд╡рд╛рдкрд╕ рд▓реЗ рд░рд╣рд╛ рд╣реИ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░ рд╕реЗ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓реАрдирд░ рддрд░реАрдХрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЦреБрдж рдХреЛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдХреЛрдб рдЧрдВрдз рдорд╛рдирддрд╛ рд╣реВрдВред

рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг @robwormald рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЕрднреА рднреА рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ рдХрд┐ рдПрдХ рдмрдЪреНрдЪрд╛ -> рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рддрдм рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм [hidden] *ngIf ( [hidden] рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред = рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди)ред рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рдпрд╣ рдЕрднреА рднреА ExpressionChangedAfterItHasBeenCheckedError рджреЗрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдХреЛрдгреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП 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 рд╕рд┐рд░реНрдл desugar рд╣реИред рдЗрд╕рд▓рд┐рдП

<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 router-outlet рдмрдирд╛рддрд╛ рд╣реИ EmbeddedView RouterOutlet рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд╛рдж рд╣рдо рдЕрдкрдиреЗ AppComponent рджреГрд╢реНрдп рдореЗрдВ рджреЛ рдПрдореНрдмреЗрдбреЗрдб рджреГрд╢реНрдп рд░рдЦрддреЗ рд╣реИрдВред

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

рдЖрдЗрдП рдЗрд╕реЗ рдЪрд┐рддреНрд░ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

haschanged

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ

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

рдХреЛрдгреАрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдо рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛:

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 рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ) true ) рдФрд░ рдЬрдм рдХреЛрдгреАрдп 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

рдХреЛрдгреАрдп рдЗрд╕ рддрд░рд╣ рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛:

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)
    ...
}

рдЗрд╕ рддрд░рд╣ рдбреЛрдо рдкреНрд░реЙрдкрд░реНрдЯреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ ngOnInit рдореВрд▓реНрдп рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдирд┐рд░реНрджреЗрд╢ *ngIf рдФрд░ рдбреЛрдо рд╕рдВрдкрддреНрддрд┐ [hidden] рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИ

рд╡рд┐рд╕реНрддреГрдд рдЕрд╡рд▓реЛрдХрди @alexzuza рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдерд╛!

setTimeout () рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ :) рдзрдиреНрдпрд╡рд╛рдж @jingglang :)
.subscribe (рдбреЗрдЯрд╛ => setTimeout (() => this.requesting = data, 0))

@robwormald рдпрд╣рд╛рдБ рд╕рд╣реА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдирдЬреАрдЖрд░рдПрдХреНрд╕ рдФрд░ рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдорд╛рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рдШрдЯрдХ рдХрдВрдЯреЗрдирд░ рдереЗ рдЬреЛ рд╕реНрдЯреЛрд░ рд░рд╛рдЬреНрдп рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд░рд╣реЗ рдереЗред рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдлреАрдЪрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛, рд╕рдорд╕реНрдпрд╛ рджреВрд░ рд╣реЛ рдЧрдИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЬрдЯрд┐рд▓ рдЙрддреНрддрд░ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдирдЬреАрдЖрд░рдПрдХреНрд╕ рдХрдВрдЯреЗрдирд░ / рдШрдЯрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЬрд╛рдВрдЪ рдХреЛ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ

SetTimeOut рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж @jingglang
ngAfterViewInit () {
this.innerHeight = (window.innerHeight);
setTimeout () (> = this.printPosition (), 0);
}

@alexzuza , рдпрд╣ рд╕рд┐рд░реНрдл ngIf рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП) рднреА [ngClass] рдХреЗ рд╕рд╛рде

@ рдирд┐рдВрдЬрд╛-рдХреЛрдбрд┐рдВрдЧ-рдЧрд┐рдЯ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, 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 -+рейреи,ремрео,режрез,резрепреи рдореИрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ ngrx рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдкрд░ рдХрд┐рдП рдЧрдП, рддреЛ рд╡рд╣рд╛рдВ рд╕реНрдерд┐рдд рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

@victornoel рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдмрд╣реБрдд рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдмрд▓ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ (рдЗрдореНрдпреВрдЯреЗрдмрд▓рдЬ) рдиреЗрд╕реНрдЯреЗрдб рдорд┐рд▓ рдЧрдП рд╣реИрдВ, рдФрд░ рд╣рдо рд╣рд░ рдЬрдЧрд╣ рдПрд╕рд┐рдВрдХреНрд╕ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░реЗ рд╢реБрд░реБрдЖрддреА рд╡рд┐рдЪрд╛рд░ рдереЗ, рд╕реНрдЯреЛрд░ рд╣рд╛рдЗрдб рд╣реЛрдиреЗ рдкрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛, рдФрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреА рднрд░рдкрд╛рдИ рдХрд░реЗрдЧрд╛ рдФрд░ рджреВрд╕рд░рд╛ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдЧрд╛ред

рд╣рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдмрд▓ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ (рдЗрдореНрдпреВрдЯреЗрдмрд▓рдЬ) рдиреЗрд╕реНрдЯреЗрдб рдорд┐рд▓ рдЧрдП рд╣реИрдВ, рдФрд░ рд╣рдо рд╣рд░ рдЬрдЧрд╣ рдПрд╕рд┐рдВрдХреНрд╕ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░реЗ рд╢реБрд░реБрдЖрддреА рд╡рд┐рдЪрд╛рд░ рдереЗ, рд╕реНрдЯреЛрд░ рд╣рд╛рдЗрдб рд╣реЛрдиреЗ рдкрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ рдФрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреА рднрд░рдкрд╛рдИ рдХрд░реЗрдЧрд╛ рдФрд░ рджреВрд╕рд░рд╛ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдЧрд╛ред

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдбреЗрдЯрд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ (рдиреЗрд╕реНрдЯреЗрдб рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп) рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ! : рд╣реЗ

рдЖрдк рдХреЗрд╡рд▓ рдЖрд╢рд╛ рд╣реА рд╣реИ:

  • рдмрджрд▓рддреЗ рд╣реБрдП рдЖрдк рдбреЗрдЯрд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рджреВрд╕рд░реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рди рдорд┐рд▓реЗ
  • рд╕рд╛рд╡рдзрд╛рди рдШрдЯрдХреЛрдВ рдХреЗ childs рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ async рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреЛрд░ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ
  • рдЬрдм рдЖрдк рдкреВрд░реНрд╡реЛрдХреНрдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  • рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдордп рдпрд╛ рдХрд┐рд╕реА рд╕реЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдВ

рдореИрдВ 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ let chips = [].map.call(document.querySelectorAll('li.chip'), this.chipVisible);

ChangeDetectorRef.detectChanges() рд╕рд╛рде @bogdancar рдХрд╛ рд╕рдорд╛рдзрд╛рди рддреНрд░реБрдЯрд┐ рдХреЛ рджрдмрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рднреА рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рддреНрд░реБрдЯрд┐ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЙрд╕реЗ рдареАрдХ рдХрд░рдХреЗ ChangeDetectorRef рдХреЛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд╡рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рдЬрдм рдореИрдВ рдХреЛрдгреАрдп 4.4.4 рдореЗрдВ rxjs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рд╕рд┐рд░реНрдл DI рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реВрдВред рдиреАрдЪреЗ рдореЗрд░рд╛ рдХрд╛рдо:

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

рдореИрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ setTimeout рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдм рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

ngOnChanges (рдкрд░рд┐рд╡рд░реНрддрди: SimpleChanges | рдХреЛрдИ рднреА) рдЪрд╛рд▓ рдХрд░рддрд╛ рд╣реИ

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрд╕ рдПрдирдЬреАрдбреЙрдЪреЗрдХ () рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ рдЧрддрд┐рд╢реАрд▓ рдмрджрд▓рддреЗ рдорд╛рдкрджрдВрдбреЛрдВ рддрд░реНрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
ngDoCheck(): void { this.checkValid = this.sourceArr.includes((this.chanedVal).toUpperCase()); }

@ asrinivas61 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред ngDoCheck рдХреЛ рдХреЛрдгреАрдп рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ sourceArr рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

Https://angular.io/guide/lifecycle-hooks#other -angular-lifecycle-hook рджреЗрдЦреЗрдВ

рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп ngAfterViewInit рд╕рд╛рде setTimeout 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);
  }

@droroh рдЖрдкрдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ js рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдЕрдЧрд▓реЗ async рдХрд╛рд░реНрдп рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ред

@victornoel рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ detectChanges 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 , рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЬреЗрдирд░реЗрд╢рди рдХреЛрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реИ?

рдХреЛрдгреАрдп рдбреЙрдХреНрд╕ рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд▓рдВрдХрд░ рдбреЗрдореЛ рдореЗрдВ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? :) рдзрдиреНрдпрд╡рд╛рдж

@luckylooke

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

рдпрд╣ рдХрд╛рдо?

рдореБрдЭреЗ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 3 рд╕реЗрдХрдВрдб рдХрд╛ рдЕрдВрддрд░рд╛рд▓ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдХреЙрд▓ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

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

@istiti рдореИрдВ ChangeDetectorRef рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдбреЗрдЯрд╛ ... рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рдж detectChanges() рдбрд╛рд▓ рд░рд╣рд╛ рдерд╛ред

рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрд╕ рд╕реЗ рднрд░рдкреВрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рдерд╛ред рдЯрд╛рдЗрдордЖрдЙрдЯ рдпрд╛ ChangeDetectorRef рдирд╣реАрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рднреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдерд╛ .. рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рдЧрдВрднреАрд░рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдгреАрдп рдбреЙрдХреНрд╕ рдХреЛрдб рдореЗрдВ рднреА рд╕рдорд╛рди рд╣реИрдВред

рд╕рд┐рд░реНрдл FYI рдХрд░реЗрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ main.ts рдореЗрдВ рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ
`EnableProdMode ()

// рдЕрдЧрд░ (рдкрд░реНрдпрд╛рд╡рд░рдг.рдЙрддреНрдкрд╛рдж) {

// enableProdMode ();

//} `

"@ рдХреЛрдгреАрдп / рдХреЛрд░": "^ 4.2.4"
"рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ": "~ 2.3.3"

@bakthaa ... рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдЬрд╛рдБрдЪ (рдЪрд╛рд╣реЗ рдШрдЯрдХ @Inputs() рдореВрд▓реНрдп рд╕рдорд╛рди рд╣реЛрдВ) рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдбреА рдЪрдХреНрд░ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдХреЛрдгреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЛрдб рдореЗрдВред рддреЛ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрд╛рджрди рдореЛрдб рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд╣реИ ... рдФрд░ рд╢рд╛рдпрдж рдЙрддреНрдкрд╛рджрди рдореЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рд╛рдВрдЫрд┐рдд рдпрд╛ рдЧрд▓рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд░реЛрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ Angular 5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдШрдЯрдХ рдореЗрдВ ChangeDetectorRef рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

    constructor(private changeDetector: ChangeDetectorRef) {}

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

@ рд╕рд╛рдмрд░реА-рдмреЛрдЪрд▓реЗрдорд╛ ... рд╣рд╛рдВ, рдпрд╣ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП ... рдХреНрдпреЛрдВ рдПрдХ рд╕реАрдбреА рдЪрдХреНрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдШрдЯрдХ @Inputs рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ ... рдФрд░ рддрдп рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ ... рддрд░реНрдХ рд╕рд╣реА рд╣реИ ... рдФрд░ рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ 95% рдорд╛рдорд▓реЛрдВ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд detectChanges() рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдХреЛрдгреАрдп 5.1.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬрдм ngAfterViewChecked рдореЗрдВ рдПрдХ рд╕рд╛рдордЧреНрд░реА рд╕рдВрд╡рд╛рдж рдЦреЛрд▓ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ @ aks4it рдиреЗ рдмрддрд╛рдпрд╛, рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдПрдХ

рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 4.01 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдПрдирдЬреА-рд╕рдВрд╕реНрдХрд░рдг = "4.0.1

рдХреЛрдгреАрдп 4.4.6 рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рднреА

this.changeDetector.detectChanges(); рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХрд░реЗрдВ

рдореИрдВрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкреНрд▓рдВрдХрд░ рдХреЛ рд░рд┐рдЯреЗрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдЪреИрдирдбреИрдЧ рдХреНрдпреЛрдВ рд╣реИред рдЗрдЯреНрд╕рдмреИрдВрд╕рдХреИрдВрдЪреЗрдбрдПрдпрд░ред рдпрджрд┐ рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреНрд░рдо рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ:

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() рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рд╣реИ ... рд╕рднреА рдПрдХ рд╕реАрдбреА рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде ... рдЗрд╕рд▓рд┐рдП рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдБрдЪ рдпрджрд┐ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдкрд░ рдЗрдирдкреБрдЯ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рджреЗрд╡ рд╡рд┐рдзрд╛ рдореЗрдВ рд╕реАрдбреА рдЪрдХреНрд░ рдХреА рд╢реБрд░реБрдЖрдд value comp1 рдкрд░ value рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреА рд╣реИред

hi @ mlc-mlapis рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рддреЛ рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ enableProdMode рдХрд╣рддрд╛ рд╣реВрдВ?

@ рдЕрд▓реЗрдХреНрд╕рд╕реЗрдВрдЯреЗрдиреЛ ... рд╣рд╛рдБ, рд╕реАрдбреА рдореЛрдб рдХреЗ рдмрд╛рдж рдЪреЗрдХрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд╕реАрдбреА рдЪрдХреНрд░ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ ... рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ value рдХреНрд░реЙрд╕ рдЪрд╛рдЗрд▓реНрдб рдШрдЯрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рднреА рд╣реИ рдХрд┐ <div> рд╕рдВрдкрддреНрддрд┐ value ред рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ? рд╕рд┐рд░реНрдл рдХреНрдпреЛрдВ рдирд╣реАрдВ:

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

рдХреНрдпреЛрдВрдХрд┐ рддрдм @Output() <comp2> рдХрд░рдирд╛ рдареАрдХ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ [value] comp1 рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

[email protected] рдХрд╛ рдЙрдкрдпреЛрдЧ angular@5 store.select рдлреЗрдВрдХ рдЪреЗрддрд╛рд╡рдиреА 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();
}

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЛрдгреАрдп 5.2, рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рддрдп ()

рд╣рд╛рдВ, рд╣рдордиреЗ рдбрд┐рдЯреЗрдХреНрдЯрдЪреЗрдВрдЬ () рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде-рд╕рд╛рде (рдХреЛрдгреАрдп 5.1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдЬрд╡рд╛рдм рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реБрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрдХреНрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЙрдк-рдЗрд╖реНрдЯрддрдо рд▓рдЧрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЬрд╡рд╛рдм рдФрд░ рд╕рд▓рд╛рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдпрд╣ рдЬрд╛рд░реА рд╣реИред

  1. рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ / рд░рд┐рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд░реЗрдВ рдФрд░ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдХреА рдУрд░ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдЪреЗрдВрдЬ рдбрд┐рдЯреЗрдХреНрд╢рди рдкрд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдмрдЪреНрдЪрд╛ рдШрдЯрдХ рдПрдХ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдиреЗ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ, рдШрдЯрдХ рд╡реГрдХреНрд╖ рдХреЗ рдиреАрдЪреЗ рдмрд╣рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ ngAfterViewInit рдФрд░ ngOnInit рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  2. this.changeDetectorRef.detectChanges(); 5% рд╕реЗ рдХрдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдФрд░ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рддрд░реАрдХрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рдХрджрдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред

рдЕрдиреНрдп рдиреЛрдЯ:

  1. ngAfterViewInit рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХреНрдпреЛрдВрдХрд┐ DOM рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрджрд▓рддреЗ рдорд╛рди рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВред
  2. Check рдпрд╛ Checked рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рдХрд┐рд╕реА рднреА рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрдХреНрд░ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  3. setTimeout рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдКрдкрд░ рджрд┐рдП рдЧрдП рджреЛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  4. рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рджреЗрд╡ рдореЛрдб рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЦреБрд╢ рд╣реЛрдирд╛ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЛрдб "рд╕реБрдзрд╛рд░" рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдпреЗ рдЬрд╛рдБрдЪ рдареЗрд╕ рдореЛрдб рдореЗрдВ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдареЗрд╕ рдореЛрдб рдХреЛрдб рдЕрднреА рднреА рдЕрд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рджреГрд╢реНрдп рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рд┐рдВрдХ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреА рдЕрдирджреЗрдЦреА / рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдФрд░ рдмрджрддрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  5. рдПрдХ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдВрдЧреБрд▓рд░ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдПрдВрдЧреБрд▓рд░ рдХреЗ рдПрдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдорд╛рд░рд╛ рд╣реИ, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред
  6. рдЕрдзрд┐рдХ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдпрд╛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрд╕ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рдЙрди рд╣реБрдХ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред рдпрд╣ рддреНрд░реБрдЯрд┐ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдПрдХ рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХреЛрдгреАрдп рддреЗрдЬ рдФрд░ рдХреБрд╢рд▓ рдмрдирд╛рддреА рд╣реИред

рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреЛрд╕реНрдЯ рдФрд░ рдХрдИ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдореЙрдбрд▓ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреИрд╕реЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рднреАрддрд░ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@Splaktar рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд▓реЙрдХ рдХрд░рдирд╛ (рдФрд░ рдореБрдЭреЗ рд╣рдЯрд╛рдирд╛) рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛? рдзрд╛рдЧрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд┐рд░реНрдл рджреЛрд╣рд░рд╛ рд░рд╣реЗ рдереЗред ЁЯШГ

@Splaktar рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ "рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдмрдЪреНрдЪрд╛ рдШрдЯрдХ рдПрдХ рдорд╛рди рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ"ред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди, рдкреГрд╖реНрда рд╢реАрд░реНрд╖рдХ рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрдк-рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдк-рдШрдЯрдХреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдШрдЯрдХ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдЙрдк-рдШрдЯрдХ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗред рдЗрди рдЙрдк-рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрдВрдЯреЗрдирд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд╣реИрдВ рддрд╛рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрдВрдЯреЗрдирд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдирд╡ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХреЗрдВ (рдмреНрд░реЗрдбрдХреНрд░рдореНрдм рдЯреНрд░реЗрд▓ рд╢рд╛рдпрдж, рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣), рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдХрдВрдЯреЗрдирд░ рд╕реНрддрд░ рдкрд░ рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рднрд░реА рд╣реБрдИ рд╣реИред

рдЗрд╕рдореЗрдВ, рдЬреЛ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдПрдХ рдЕрддреНрдпрдВрдд рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИ, рдореИрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд░рд╛рдЬреНрдп рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЙрдк-рдШрдЯрдХ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛, рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдШрдЯрдХ рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрдЪреНрдЪреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдЙрдЪрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдиреАрдЪреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдорд┐рд▓реЗрдВрдЧреЗ, рдФрд░ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХ-рддрд░рдлрд╝рд╛ рд╕рдВрдЪрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреАрдЪреЗ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕реЗ рдХрд╛рдЙрдВрдЯрд░ рдкрд░ рдЪрд▓рд╛рдПрдВ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд рд╣реИред рдЬрдм рдмрдЪреНрдЪрд╛ рдШрдЯрдХ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореВрд▓ рдШрдЯрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рдд рд╣реИ?

рдФрд░ рдХрднреА рдордд рднреВрд▓реЛ, рдХрд┐ рдПрдХ рдЕрдиреБрдореЛрджрд┐рдд рдмрдЧ рд╣реИ:
https://github.com/angular/angular/issues/15634

@ рдорд╛рд░реНрдЯрд┐рди-рд╡реЗрдЧрдирд░ рдХреГрдкрдпрд╛ https://github.com/angular/angular/pull/18352#issuecomment -354170352 рджреЗрдЦреЗрдВ

@alignsoft ... рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдФрд░ рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдкреНрд░рдЬрдирди рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рддрд░реНрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдорд╛рдорд▓реЗ рдХреЛ рдХреБрдЫ рдФрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@Splaktar рд╕реЗ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдБ рдореЗрд░реА рд╕рд░рд▓ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ @trotyl https://github.com/angular/angular/issues/17572#issuecomment -+рейрез,резрел,реореп,реирепреж рдпрд╛?

@ рдорд╛рд░реНрдЯрд┐рди-рд╡реЗрдЧрдирд░ ... рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ ngAfterViewInit рд╕реЗ ngOnInit рд╣реБрдХ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

@alignsoft , рдЬреИрд╕рд╛ рдХрд┐ @ mlc-mlapis рдиреЗ рдХрд╣рд╛ рдХрд┐ рдПрдХ Stackblitz рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕реЗрд╡рд╛рдУрдВ, рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ, рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдЖрджрд┐ рдХреЗ рд╕рд╣реА рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рд╕реНрдЯреИрдХрдСрд╡рд░рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╖рдп рд╣реЛрдЧрд╛ред

@Splaktar рдПрдХ рдмрд╛рд░ рдЬрдм рдореБрдЭреЗ рдЕрдкрдиреА рдбреЗрд╕реНрдХ рд╕реЗ рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рд╕рдордп рд╕реАрдорд╛ рдорд┐рд▓ рдЬрд╛рддреА рд╣реИ рддреЛ рдореИрдВ рдПрдХ

@ mlc-mlapis рд╡рд╛рд╣ рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)

@alignsoft , рдЖрдЬ рдореИрдВ рдПрдХ рдРрд╕рд╛ рдРрдк рдмрдирд╛ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИред @ mlc-mlapis, рдЖрдк рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬрд╝ рдкрд░ рдЫреАрди рдиреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдмрд╛рдИрдВ рдирд╛рд╡ рдкрд░ "рд╕реАрдПрдордПрд╕ рд╕рд┐рд╕реНрдЯрдо" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд░рд╛рдЙрдЯрд░-рдЖрдЙрдЯрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░рд╛рдЙрдЯрд░-рдЖрдЙрдЯрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ 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 рдХреНрдпрд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдореВрд▓ рдШрдЯрдХ (async рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде)

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 рдХреА рджреБрдирд┐рдпрд╛ рд╕реЗ рдЖрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ UI рдереНрд░реЗрдб рдХреЛ рдЕрд╡рд▓реЛрдХрдиреАрдп рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╕рджрд╕реНрдпрддрд╛ рдХреЙрд▓рдмреИрдХ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдореИрдВ рдХреЗрд╡рд▓ рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдореЗрд░реЗ рдХреЛрдгреАрдп рдХреМрд╢рд▓ рдХреЗ рдкреНрд░рддрд┐ рдХреБрдЫ рджрдпрд╛ рдХрд░реЗрдВ: рдкреА

@ktabarez рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реА!

@ktabarez рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ! рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рд▓рдкреЗрдЯ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдХрд╛рдо рднреА рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЧрдВрджрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬрдм redux рд░рд╛рдЬреНрдп рдХреЛ рдкреВрдЫрддрд╛рдЫ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд ngOnInit рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@ktabarez рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдЖрдкрдХрд╛ async ... await in subscribe рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ktabarez рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ ({}, 0) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред рдХрд╛рдлреА рдкрд╕рдВрдж рд╣реИ! рдпрд╣ рднреА рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХреБрдЫ рднреА рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдмрд╣реБрдд # рд╕реА # рдХреА рддрд░рд╣ рдЗрдВрддрдЬрд╛рд░ рдЯрд╛рд╕реНрдХ .romResult (tickedMessage)), рддреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЪреАрдпрд░реНрд╕!

рддреЛ, рдкреНрд░рд╢реНрди: рд╣рдореЗрдВ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╕рдВрдкрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдкрд░ рдПрдХ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреНрдпреЛрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЫреЛрд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЕрдХреНрд╕рд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ ngClass рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдмрдирд╛рддрд╛ рд╣реИ? рдореИрдВ рдПрдХ {рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ async} рдкрд╛рдЗрдкред рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рд╣реИред (рдпрд╛ async рдкрд╛рдЗрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ)

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдХрдИ рдмрдЪреНрдЪреЗ рдШрдЯрдХ рд╣реИрдВред рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдПрдХ рдЗрдирдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрд╕реЗ рдкреИрд░реЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдбреЗрдЯрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдФрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЙрд╕рдХрд╛ рдбреЗрдЯрд╛ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ / рдкреНрд░реЙрдорд┐рд╕ (рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ) рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред

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);
}

рдореБрдЭреЗ рдзрд╛рдЧреЗ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЛрдо рд╕реЗ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП _ (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();

рдореИрдВ рдореИрдЯ-рдбрд╛рдпрд▓ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдЗрдирд┐рдЯ рдкрд░ рдЦреБрд▓рддрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рд╕рдЪрдореБрдЪ рдЗрд╕ рдереНрд░реЗрдб (рдореИрдВрдиреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ, рд╡рд╛рджрд╛ рд╣рд▓, рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдкрд╛рдЗрдк, рд╡реНрдпреВ рдЗрдирд┐рдЯ рдХреЗ рдмрд╛рдж, рдХрдВрдЯреЗрдВрдЯ рдЗрдирд┐рдЯ рдХреЗ рдмрд╛рдж) рдХреЗ рд╣рд░ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЙрд╕рдореЗрдВ рд╕рдВрдпреЛрдЬрдиред рдлрд┐рд░ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддрдм рдореИрдВрдиреЗ @Splaktar рдкреЛрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдпрд╣ рдПрдХ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЪрдореБрдЪ ngrx рдореЗрдВ рдПрдХ рдзреНрд╡рдЬ рдмрдирд╛рдпрд╛ рдФрд░ рдЙрд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛, рдЬреЛ рд╢реБрд░реВ рдореЗрдВ рдЧрд▓рдд рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореИрдВ рдкреГрдереНрд╡реА рдкрд░ рдХреНрдпрд╛ рдХрд░реВрдБ? рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдШрдЯрдирд╛ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдореЙрдбрд▓ рд╕рдВрд╡рд╛рдж рдХреЛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ?

Init рдкрд░:
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)); }

рдХреЛрдгреАрдп 6.0.0-rc.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдореИрдВ ngrx рдХреЗ рд╕рд╛рде рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рддреНрд░реБрдЯрд┐ рдЖрдИ рд╣реИред
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ
ChangeDetectionStrategy.OnPush
рдлрд╛рд░реНрдо рдШрдЯрдХ рдкрд░

рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред setTimeout рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдореЗрдВ dialog.open рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдХреЛрдИ рд╕реНрдЯреЗрдЯрд╕?

рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдПрдХ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдЙрдарддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдореИрдВ рдЪрдпрдирд┐рдд рдЪрдпрдирд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛрддреА рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред

        <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>

рдирд┐рдЬреА рд╕реЗрдЯ
рдЕрдЧрд░ (рдпрд╣ред
this.selectedWoids = this.allWoids;
}
}

рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреЛрдгреАрдп рдХреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ ...

рдореИрдВ 4.1.2 рд╕реЗ 4.2.3 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж "ExpressionChanged ..." рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рд╕реЗрд╡рд╛ рдореЗрд░реЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ 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 , рдореБрдЭреЗ "ExpressionChanged ..." рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП ComponentA рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

_ComponentA рдЯреЗрдореНрдкрд▓реЗрдЯ: _

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

рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдореБрджреНрджрд╛ рдХреНрдпреЛрдВ рдмрди рдЧрдпрд╛ рд╣реИ, рдФрд░ *ngIf рд╕реЗ [hidden] рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХреНрдпреЛрдВред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдирдЬреАрдЖрдИрдПрдл рд╕реЗ [рдЫреБрдкрд╛]

рдХреНрдпрд╛ рдПрдВрдЧреБрд▓рд░ 6 рдореЗрдВ рдЕрднреА рддрдХ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ ??

@alokkarma ... рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ ... рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо 6 рдпрд╛ 5 рдХреЛрдгреАрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИ ... рдЖрдк рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ B рдореЗрдВ рд╕рд░реНрд╡рд┐рд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ A рдореЗрдВ рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рдПрдХ рд╣реА рдкреИрд░реЗрдВрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреАрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕реАрдбреА рдЪрдХреНрд░ рдореЗрдВ рд╕рдВрдмрдВрдзред рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ?

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдорд╛рдорд▓рд╛ 4.1.2 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдХреБрдЫ рдмрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ 4.2.3 рднреА рд╢рд╛рдорд┐рд▓ рдерд╛ред

рдореИрдВ Angular 6. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдШрдЯрдХ рдФрд░ рдореЗрд░реЗ рдРрдк рдШрдЯрдХ рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди (рдпрд╛ рдирд╣реАрдВ) рд╣реИ рддреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдиреМрд╕реЗрдирд╛ рдмрд╛рд░ рд╕рд╛рдордЧреНрд░реА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ EventEmitter рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдпрд╛ рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

@dotNetAthlete ...

@ рдмрдд рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╣рдореЗрд╢рд╛ рдПрдХ 'рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЪреЗрдВрдЬ' рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХрдВрдЯреЗрдирд░ рдиреЗ рдореВрд▓реНрдп рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдиреЗ рддреБрд░рдВрдд рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдм рдЗрд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ / рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ:

    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 - рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди - рдореБрджреНрджрд╛ рдХреЛрдгреАрдп 6 рдРрдк рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдореИрдВ рдЗрд╕реЗ рдкреГрд╖реНрда 7 рдкрд░ рдЕрдм рдкреБрдирдГ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдореИрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ ngAfterViewInit рдкрд░ рдПрдХ рдмрд╛рд▓ рдШрдЯрдХ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдмрд╛рд▓ рдШрдЯрдХ рдкрд░ рдпрд╣ рдХрд░рдирд╛ рдерд╛

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

рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдорд┐рд▓рд╛ https://github.com/angular/angular/issues/10762
рдореИрдВрдиреЗ AfterContentInit рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред

@alignsoft , рдмрд╕ рдЖрдкрдХреЗ рдмрджрд▓рд╛рд╡ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ Subject рдХреЗ рдмрдЬрд╛рдп рдПрдХ BehavioralSubject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ,

рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛:

\\ 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);

рд▓реЗрдХрд┐рди рдореИрдВ @dadyschmack рд╕реЗ рд╕рд╣рдордд cdr.detectionChanges() рдпрд╛ async await рдпрд╛ aftercontentchecked ), рдХреНрдпреЛрдВ [hidden] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ *ngIf

@acidghost рдЙрд╕ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреАред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдПрдХ рдирдП рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╣реЛрдиреЗ рд▓рдЧрд╛ ...

рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрджреНрджрд╛ рд╕реНрд╡рддрдГ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдорд╛рди рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред

рд╣рдорд╛рд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рд▓реЙрдХрд┐рдВрдЧ рдиреАрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред

_ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреЙрдЯ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред_

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

andlcool picture andlcool  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Hongbo-Miao picture Hongbo-Miao  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mohsen1 picture mohsen1  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aquinum6 picture aquinum6  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gugamm picture gugamm  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ