рдХреЛрдгреАрдп рдпрд╛ рдЦреЛрдИ рдЧреИрд░-рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд┐рдВрдЧ рд╕рд╛рдордЧреНрд░реА

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



рдЧреИрд░-рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд┐рдВрдЧ рд╕рд╛рдордЧреНрд░реА


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

<app-parent>
    <!-- content -->
    I'm content!
    <!-- content -->
</app-parent>

рдФрд░ рдХреЛрдгреАрдп рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА HTML рдХреЛрдб (рд╕рд╛рдордЧреНрд░реА) рдХреЛ рдЗрд╕ рдШрдЯрдХ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ng-contentред

рдЖрдЗрдП рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрдЯрди рдШрдЯрдХ рд╣реИред рдЗрд╕ рдмрдЯрди рдХрд╛ рдкрд╛рда рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ input propertyред

// button.component.ts
import {Component, Input} from '@angular/core';

@Component({
  selector: 'app-button',
  template: '<button>{{text}}</button>'
})
export class ButtonComponent {
  @Input() text: string;
}

// app.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'app-root',
  template: `<app-button [text]="'Button'"></app-button>`,
})
export class AppComponent {
}

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

// icon.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-icon',
  template: 'тШ╗',
})
export class IconComponent {
}

// button.component.ts
import {Component, Input} from '@angular/core';

@Component({
  selector: 'app-button',
  template: `<button>
               <app-icon *ngIf="showIcon"></app-icon>
               {{text}}
             </button>`,
})
export class ButtonComponent {
  @Input() text: string;
  @Input() showIcon = true;
}

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

рдЗрди рд╕рдм рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ng-contentред рдЗрд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╕рдм рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдШрдЯрдХ рдХреЗ рдЦреБрд▓рдиреЗ рдФрд░ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдЯреИрдЧ рдХреЗ рдмреАрдЪ рд░рдЦрддреЗ рд╣реИрдВред

// button.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'app-button',
  template: `<button>
               <ng-content></ng-content>
             </button>`,
})
export class ButtonComponent {
}

// app.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'app-root',
  template: `<app-button>
               <app-icon></app-icon>
               Button
             </app-button>`,
})
export class AppComponent {
}

Stackblitz рдХреЛрдб

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

рдПрдирдЬреА-рдХрдВрдЯреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЪрдпрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреА рд╣реИ?


рдХрднреА-рдХрднреА рд╣рдореЗрдВ рдмрд╛рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рдХреБрдЫ рд╕рд╛рдордЧреНрд░реА рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ selectрдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ ( .some-class, some-tag, [some-attr]) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ ред

// button.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'app-button',
  template: `<button>
               <ng-content></ng-content>
               <div>
                 <ng-content select="app-icon"></ng-content>
               </div>
             </button>`,
})
export class ButtonComponent {
}

рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬрд╝ рдХреЛрдб

рдЕрдм рдЖрдЗрдХрди рд╣рдореЗрд╢рд╛ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ред Perfecto!

NgProjectAs рдХреНрдпрд╛ рд╣реИ?


selectY рд╡рд┐рд╢реЗрд╖рддрд╛ ng-contentрдЙрди рдЯреИрдЧреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рдЬреЛ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдкрд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рдПрдХ рдЯреИрдЧ рдореЗрдВ рдПрдХ рдЖрдЗрдХрди рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ?

// app.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'app-root',
  template: `<app-button>
               <ng-container>
                 <app-icon></app-icon>
               </ng-container>
               Button
             </app-button>`
})
export class AppComponent {}

рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ selectрдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ <ng-content select="...">рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдкрд░ рд╣реА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ ngProjectAsред рдпрд╣ рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╕рдВрдкреВрд░реНрдг DOM рдиреЛрдб рдХреЛ "рдорд╛рд╕реНрдХ" рдХрд░рддрд╛ рд╣реИред

// app.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'app-root',
  template: `<app-button>
               <ng-container ngProjectAs="app-icon">
                 <app-icon></app-icon>
               </ng-container>
               Button
             </app-button>`
})
export class AppComponent {}

рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬ рдХреЛрдб

рдХреЗрд╕ * ngIf + рдПрдирдЬреА-рдХрдВрдЯреЗрдВрдЯ


рдЖрдЗрдП рд╣рдо рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдореЗрдВ рдЫрд┐рдкрд╛рдиреЗ / рд╢реЛ рдЖрдЗрдХрди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрдЯрди рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреВрд▓рд┐рдпрди рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЖрдЗрдХрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЗрд╕реЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдмрджрд▓ рджреЗрдВ рдФрд░ рдЗрд╕реЗ рд▓рдЯрдХрд╛ рджреЗрдВ ngIfред

// button.component.ts
import {Component, Input} from '@angular/core';

@Component({
  selector: 'app-button',
  template: `<button (click)="toggleIcon()">
               <ng-content></ng-content>
               <div *ngIf="showIcon">
                 <ng-content select="app-icon"></ng-content>
               </div>
             </button>`,
})
export class ButtonComponent {
  showIcon = true;

  toggleIcon() {
    this.showIcon = !this.showIcon;
  }
}

рдЖрдЗрдХрди рдЫрд┐рдкрд╛ рд╣реИ / рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдареАрдХ! рд▓реЗрдХрд┐рди рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓реЙрдЧ рдЬреЛрдбрд╝рдиреЗ OnInitрдФрд░ OnDestroyрдЖрдЗрдХрди рдШрдЯрдХ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдПрдХ рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рддрдереНрдп рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд░реНрджреЗрд╢, ngIfрдЬрдм рдХрд┐рд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рддрддреНрд╡ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ / рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ OnDestroy/ рдЗрд╕ OnInitрд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

// icon.component.ts
import { Component, OnInit, OnDestroy } from '@angular/core';

@Component({
  selector: 'app-icon',
  template: 'тШ╗',
})
export class IconComponent implements OnInit, OnDestroy {
  ngOnInit() {
    console.log('app-icon init');
  }

  ngOnDestroy() {
    console.log('app-icon destroy')
  }
}

Stackblitz рдкрд░ рдХреЛрдб

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

рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд▓реЙрдЧ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрдЗрдХрди рдШрдЯрдХ рдХрднреА рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред рдпреЗ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

ng-content рдпрд╣ рдирдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрд┐рд╕ рдШрдЯрдХ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ, рд╡рд╣ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдХреНрд╖рдг рдерд╛ред рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдареАрдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╢реБрд░реВ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗред

// button.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'app-button',
  template: `<button>
                <ng-content></ng-content>
                <ng-content select="app-icon"></ng-content>
             </button>`,
})
export class ButtonComponent {
}

// app.component.ts
import { Component } from "@angular/core";

@Component({
  selector: 'app-root',
  template: `<app-button (click)="toggleIcon()">
              <div *ngIf="showIcon" ngProjectAs="app-icon">
                <app-icon></app-icon>
              </div>
              Button
            </app-button>`,
})
export class AppComponent {
  showIcon = true;

  toggleIcon() {
    this.showIcon = !this.showIcon;
  }
}

рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬрд╝ рдкрд░ рдХреЛрдб

рдиреЗ рд▓реЙрдЧреНрд╕ рдЦреЛрд▓реЗ рд╣реИрдВ, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЗрдХрди рдХрд╛ рдШрдЯрдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


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

All Articles