10 рдЙрдкрдпреЛрдЧреА рдХреЛрдгреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛ рдЖрдкрдиреЗ рдпрд╛рдж рдХреАрдВ


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

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


рдЙрджрд╛рд╣рд░рдг: рдмрд┐рдЯ.рджреЗрд╡ рдХреЗ рд╕рд╛рде рдХреЛрдгреАрдп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдкрддреНрд░ рд▓реЛрдбрд░


1. рд╢реАрд░реНрд╖рдХ


рд╢реАрд░реНрд╖рдХ рдЯреИрдЧ рдПрдХ HTML рддрддреНрд╡ рд╣реИ рдЬреЛ рд╡реЗрдм рдкреЗрдЬ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╢реАрд░реНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдкреГрд╖реНрда (SERP) рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд╡реЗ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛, рдПрд╕рдИрдУ рдФрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдкреНрд░рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХред

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

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╢реАрд░реНрд╖рдХ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛?

рдХреЛрдгреАрдп рдореЗрдВ рд╢реАрд░реНрд╖рдХ рд╕реЗрд╡рд╛ рд╣реИрдХреЛрдгреАрдп/ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдмреНрд░рд╛рдЙрдЬрд╝рд░ред рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ рдПрдореНрдмреЗрдб рдФрд░ рд╢реАрд░реНрд╖рдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setTitle рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

import { Title } from "@angular/platform-browser"@Component({
   ...
})
export class LoginComponent implements OnInit {
   constructor(private title: Title) {}    ngOnInit() {
       title.setTitle("Login")
   }
}

рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ LoginComponent рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХрд╛ рд╢реАрд░реНрд╖рдХ "рд▓реЙрдЧрд┐рди" рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

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

2. рдореЗрдЯрд╛


рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯрд╛ рдЯреИрдЧ рднреА index.html рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдШрдЯрдХреЛрдВ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдЯрд╛ рд╕реЗрд╡рд╛ рд╕реЗрдХреЛрдгреАрдп/ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдмреНрд░рд╛рдЙрдЬрд╝рд░ред

рдФрд░ рдлрд┐рд░ рд╕реЗ: рдореЗрдЯрд╛ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдЬрд┐рдХ рд░реВрдк рд╕реЗ рдПрд╕рдИрдУ рдФрд░ рдкреЗрдЬ рдкреНрд░рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ, рд╡реЗ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЦреЛрдЬ рдЗрдВрдЬрди рд╕рд╣реА рд░реИрдВрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдореЗрдЯрд╛ рдЯреИрдЧ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдЯрд╛ рд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВрдХреЛрдгреАрдп/ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдЗрдЪреНрдЫрд┐рдд рдШрдЯрдХ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░реЗрдВред

import { Meta } from "@angular/platform-browser"@Component({
    ...
})
export class BlogComponent implements OnInit {
    constructor(private meta: Meta) {}    ngOnInit() {
        meta.updateTag({name: "title", content: ""})
        meta.updateTag({name: "description", content: "Lorem ipsum dolor"})
        meta.updateTag({name: "image", content: "./assets/blog-image.jpg"})
        meta.updateTag({name: "site", content: "My Site"})
    }
}

BlogComponent рдХреЛ рдЕрдм Twitter, Facebook рдЖрджрд┐ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд╣реА, рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд░реНрдгрди, рд╢реАрд░реНрд╖рдХреЛрдВ рдФрд░ рдЫрд╡рд┐рдпреЛрдВред
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реБрдирд╛ рд╣реИ? рдлрд┐рд░ рдпрд╣рд╛рдБ рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

3. рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдкреИрдЯрд░реНрди рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди


рдкреИрдЯрд░реНрди рдореЗрдВ рдорд╛рдирдХ рдкреНрд░рдХреНрд╖реЗрдкрдХ {{}} рд╣реИред рдпрджрд┐ рдЖрдк {{рдФрд░}} рдХреЗ рдмреАрдЪ рдПрдХ рдЪрд░ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЕрдВрддрд┐рдо DOM рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдкрд╛рддреНрд░реЛрдВ рдкрд░ рдорд╛рдирдХ рдХреИрдкреНрд╕реВрд▓реАрдХрд░рдг рд╕реАрдорд╛рдВрдХрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ? рдпрд╣ рдЖрд╕рд╛рди рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдШрдЯрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдкреНрд░рдХреНрд╖реЗрдк рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдирдП рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@Component({
   interpolation: ["((","))"]
})
export class AppComponent {}

AppComponent рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдкреНрд░рдХреНрд╖реЗрдк (()), рдФрд░ {{}} рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

@Component({
   template: `
       <div>
           ((data))
       </div>
   `,
   interpolation: ["((","))"]
})
export class AppComponent {
   data: any = "dataVar"
}

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ "dataVar" рдХреЛ ((рдбреЗрдЯрд╛)) рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

4. рд╕реНрдерд╛рди


рд╣рдо рд╕реНрдерд╛рди рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЦреЛрд▓реЗ рдЧрдП рдкреГрд╖реНрда рдХрд╛ рд╡рд░реНрддрдорд╛рди URL рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдерд╛рди URL (/ рдЙрджрд╛рд╣рд░рдг / рдкреГрд╖реНрда /) рдпрд╛ рдкрд╛рдЙрдВрдб (# рдкрд░реАрдХреНрд╖рдг / рдкреГрд╖реНрда /) рдХреЗ рдмрд╛рдж URL рдХреЗ рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдкрде рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде, рд╣рдо URL рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣рд╛рдиреА рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд░реНрддрдорд╛рди URL рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрд╣рд╛рдиреА рдореЗрдВ рд╢реАрд░реНрд╖ рдЖрдЗрдЯрдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

CommonModule рд╕реЗ рд╕реНрдерд╛рди рд╕реЗрд╡рд╛ рдпрд╣рд╛рдБ рдорджрдж рдорд┐рд▓реЗрдЧреАред

import { Location } from "@angular/common"@Component({
   ...
})
export class AppComponent {
   constructor(private location: Location) {}    navigateTo(url) {
       this.location.go(url)
   }    goBack() {
       location.back()
   }    goForward() {
       location.forward()
   }
}


5. рджрд╕реНрддрд╛рд╡реЗрдЬрд╝


рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рд╕реАрдзреЗ DOM рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

DOCUMENT рдмрд╕ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред DOCUMENT рдореБрдЦреНрдп рдкреНрд░рддрд┐рдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ DI рдЯреЛрдХрди рд╣реИред рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдПрдХ DOM рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИред рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ DOM рдСрдкрд░реЗрд╢рдВрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ HTML рддрддреНрд╡ рд╣реИрдВ:

<canvas id="canvas"></canvas>


рдХреИрдирд╡рд╛рд╕ HTMLElement рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, DOCUMENT рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

@Component({})
export class CanvasElement {
   constructor(@Inject(DOCUMENT) _doc: Document) {}
}


GetElementById () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTMLElement рдХреИрдирд╡рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

@Component({})
export class CanvasElement {
   constructor(@Inject(DOCUMENT) _doc: Document) {}    renderCanvas() {
       this._doc.getElementById("canvas")
   }
}


рдЪреЗрддрд╛рд╡рдиреА: рдзреНрдпрд╛рди рд╕реЗ рдзреНрдпрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ! DOM рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдЦрддрд░рдирд╛рдХ рд╣реИ рдФрд░ XSS рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред

6. рдбреЗрдХреЛрд░реЗрдЯрд░ @ рд╢реНрд░рджреНрдзрд╛рдВрдЬрд▓рд┐


рдореВрд▓ рд░реВрдк рд╕реЗ, рдПрдХ рдХреЛрдгреАрдп рдЖрд╡реЗрджрди рдореЗрдВ, рд╡реЗ рдШрдЯрдХ, рдореЙрдбреНрдпреВрд▓, рдФрд░ рдирд┐рд░реНрджреЗрд╢рдХ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

рд╡рд┐рд╢реЗрд╖рддрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдорд╛рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЬрд╛рдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреА рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛рдЗрдирдкреБрдЯ:

@Component({
   ...
})
export class BlogComponent {
   constructor(@Attribute("type") private type: string ) {}
}


7. HttpInterceptor


HttpInterceptor рдХреЛрдгреАрдп рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ HttpRequest рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдЖрдЙрдЯрдмрд╛рдЙрдВрдб рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдЧрд▓реА рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЗрдВ рдЕрдЧрд▓реА рдмрд╛рд░ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

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

HttpInterceptor рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдкреНрд░рдорд╛рдгреАрдХрд░рдг
  • рдХреИрд╢рд┐рдВрдЧ
  • рдирдХрд▓реА рдмреИрдХрдПрдВрдб
  • рдпреВрдЖрд░рдПрд▓ рдкрд░рд┐рд╡рд░реНрддрди
  • рд╣реИрдбрд░ рддреЛрдбрд╝рдлреЛрдбрд╝

рдЗрд╕ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдФрд░ HttpInterceptor рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@Injectable()
export class MockBackendInterceptor implements HttpInterceptor {
   constructor() {}    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
       ...
   }
}

рдЗрд╕реЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдбрд╛рд▓реЗрдВ:
@NgModule({
   ...
   providers: [
       {
           provide: HTTP_INTERCEPTORS,
           useClass: MockBackendInterceptor,
           multi: true
       }
   ]
   ...
})
export class AppModule {}


8. рд╡рд┐рдирд┐рдпреЛрдЧрдХрд░реНрддрд╛


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

function runSettingsOnInit() {
   ...
}

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдореБрдЦреНрдп AppModule рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ NgModule рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреНрд░рджрд╛рддрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

@NgModule({
   providers: [
       { provide: APP_INITIALIZER, useFactory: runSettingsOnInit }
   ]
})

9. рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╢реНрд░реЛрддрд╛


AppInitialzer рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рд╕реЗ, рдХреЛрдгреАрдп рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдШрдЯрдХ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ APP_BOOTSTRAP_LISTENER рд╣реИред

рдЗрд╕ рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд╕рднреА рдХреЙрд▓рдмреИрдХ рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдХрд╣рд▓рд╛рдПрдВрдЧреЗред

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

APP_BOOTSTRAP_LISTENER рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ AppModule рдореЗрдВ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

@NgModule({
   {
       provide: APP_BOOTSTRAP_LISTENER, multi: true,
       useExisting: runOnBootstrap
   }
   ...
})
export class AppModule {}


10. NgPlural


рдмрд╣реБрд╡рдЪрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░рджрд░реНрдж рд╣реИред рд╡рд┐рд▓рдХреНрд╖рдг / рдмрд╣реБрд╡рдЪрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢рдмреНрдж рд░реВрдкреЛрдВ рдХреЗ рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рд╕рдорд╛рдпреЛрдЬрди рдХрд╛ рдХрд╛рд░реНрдп рд▓рдЧрд╛рддрд╛рд░ рдЙрдарддрд╛ рд╣реИред рдХреБрдЫ рд╕рд╛рдЗрдЯреЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

1 component(s) removed
3 component(s) removed

рд╣реИ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ, рдкрд╛рдардХ рдЦреБрдж рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд╣рд┐рдд рд╣реИ :)

рдХреЛрдгреАрдп рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рднреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ NgPlural рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ,ред

NgPlural рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ DOM рдЙрдк-рд╢рд╛рдЦрд╛рдПрдБ рдЬреЛрдбрд╝рддрд╛ рдпрд╛ рд╣рдЯрд╛рддрд╛ рд╣реИред рдмрд╣реБрд╡рдЪрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рддрддреНрд╡ рдХрдВрдЯреЗрдирд░ рдореЗрдВ [ngPlural] рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд░реНрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ [ngPluralCase] тАЛтАЛрд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓реЗ рдЖрдВрддрд░рд┐рдХ рддрддреНрд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:

<p [ngPlural]="components">
   <ng-template ngPluralCase="=1">1 component removed</ng-template>   
   <ng-template ngPluralCase=">1">{{components}} components removed </ng-template>   
</p>


рдЕрдм рдЖрдк '' рдХреЛ '' рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред NgPlural рдирд┐рд░реНрджреЗрд╢ рдЕрд░реНрде рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣реА рд╢рдмреНрдж рд░реВрдк рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╕рдВрдкреВрд░реНрдг:

// if 1 component
1 component removed

// if 5 components
5 components removed


Source: https://habr.com/ru/post/undefined/


All Articles