
рд╢реБрдн рджреЛрдкрд╣рд░, рд╕рд╣рдХрд░реНрдореАред рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЬреИрдХрдм рдлрд╛рдЗрди рдФрд░ рдПрдВрдЯреЛрди
рдореЛрдЗрд╕реЗрд╡ рдХреА рдХрд┐рддрд╛рдм рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдирд╣реАрдВ
ред "
рдХреЛрдгреАрдп рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯред рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг ред"
рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рдЧрд┐рд░рд╛рд╡рдЯ рд╕реЗ рдмрд╛рд╣рд░ рдЖрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдгреАрдп 5 рдФрд░ 6 рдкрд░ рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдкрд╣рд▓реЗ рддреЛ рд╣рдордиреЗ рдЖрдЗрд╡реА рдЗрдВрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдЬреЛ рдХрд┐ рдХреЛрдгреАрдп 6 рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдирд╡рд╛рдЪрд╛рд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдордиреЗ рд╕реЗрдбреНрд░рд┐рдХ рдПрдХреНрд╕рдмреНрд░рд╛рдЗрдЯ (рдореВрд▓ рдордИ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛) рд╕реЗ рдЕрдзрд┐рдХ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рдХрд╛рд╢рди рдкрд░ рд░реЛрдХ рджрд┐рдпрд╛ред
рдХреЛрдгреАрдп 6 рдореЗрдВ, рдХрдИ рдЧрдВрднреАрд░ рдирд╡рд╛рдЪрд╛рд░ рдереЗ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдк рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣ рдЖрдЗрд╡реА, рдПрдХ рдирдпрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдЗрдВрдЬрди рд╣реИред рдЪреВрдВрдХрд┐ рдЗрдВрдЬрди рдЕрднреА рднреА рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИ, рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдиреНрдп рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдЯреНрд░реА-рд╢реЗрдХреЗрдмрд▓ рдкреНрд░рджрд╛рддрд╛рдЕрдм рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ
@Injectable()
рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдирдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛, рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ, рдирдП рджрд┐рдП
providedIn
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ
'root'
рд▓реЗрддрд╛ рд╣реИред
'root'
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп
'root'
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рдХреБрдВрд╡рд╛рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡реЗрджрди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд░реВрдЯ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рджрд╛рддрд╛рдУрдВ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдЬрдм
providedIn: UsersModule
рдХрд╛ рдЙрдкрдпреЛрдЧ
providedIn: UsersModule
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд╕реНрддреБ рдХреЛ
UsersModule
рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
@Injectable({ providedIn: 'root' }) export class UserService { }
рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ) рдореЗрдВ рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдХреА рдЧрдИ рдереАред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдРрд╕реА рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛ рд░рд╣реА рд╕реЗрд╡рд╛ рдЕрдВрддрд┐рдо рд╕реЗрдЯ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреА, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ - рдФрд░ рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдереЛрдбрд╝рд╛ рджреБрдЦрдж рд╣реИред рдпрджрд┐ рдЖрдк рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рдЬрд╛рд▓ рдореЗрдВ рдЧрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реЗрд╡рд╛ рдЧрд▓рдд рд╕реЗрдЯ рдореЗрдВ рджрд░реНрдЬ рдХреА рдЬрд╛рдПрдЧреАред
рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЕрдХреНрд╕рд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ (рдпрджрд┐ рдЖрдк рдПрдХ рд╕реЗрд╡рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рддреГрддреАрдп-рдкрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рдХрднреА-рдХрднреА рдРрд╕реА рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреЗрдХрд╛рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рд╣реИред
рддреЛ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИ - рдпрд╣ рднреА рдЖрд╡реЗрджрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдирдИ рд╕реАрдПрд▓рдЖрдИ рдЕрдм рднреА
providedIn: 'root'
рдХреА
providedIn: 'root'
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ
providedIn: 'root'
рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
providedIn: 'root'
рдордЪрд╛рдиред
рдПрдХ рд╣реА рдирд╕ рдореЗрдВ, рдЖрдк рдЕрдм рдПрдХ
InjectionToken
рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕реАрдзреЗ рджрд┐рдП рдЧрдП рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
providedIn
рдФрд░ рдпрд╣рд╛рдВ рдПрдХ
factory
рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
export const baseUrl = new InjectionToken<string>('baseUrl', { providedIn: 'root', factory: () => 'http://localhost:8080/' });
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рднреА рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдерд╛:
beforeEach(() => TestBed.configureTestingModule({ providers: [UserService] }));
рдЕрдм, рдпрджрд┐ UserService
providedIn: 'root'
рдХрд░рддрд╛ рд╣реИ
providedIn: 'root'
:
beforeEach(() => TestBed.configureTestingModule({}));
рдмрд╕ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ: рдкреНрд░реЛрд╡рд╛рдЗрдб рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд▓рд╕реА рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред
Rxjs 6рдХреЛрдгреАрдп 6 рдЕрдм рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ RxJS 6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдФрд░ ... RxJS 6 рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрджрд▓ рд░рд╣рд╛ рд╣реИ!
RxJS 5 рдореЗрдВ, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/of'; import 'rxjs/add/operator/map'; const squares$: Observable<number> = Observable.of(1, 2) .map(n => n * n);
RxJS 5.5 рдореЗрдВ, рдкрд╛рдЗрдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдпрд╛рди рджрд┐рдЦрд╛рдИ рджрд┐рдП:
import { Observable } from 'rxjs/Observable'; import { of } from 'rxjs/observable/of'; import { map } from 'rxjs/operators'; const squares$: Observable<number> = of(1, 2).pipe( map(n => n * n) );
рдФрд░ RxJS 6.0 рдореЗрдВ, рдЖрдпрд╛рдд рдмрджрд▓ рдЧрдП рд╣реИрдВ:
import { Observable, of } from 'rxjs'; import { map } from 'rxjs/operators'; const squares$: Observable<number> = of(1, 2).pipe( map(n => n * n) );
рдЗрд╕рд▓рд┐рдП, рдПрдХ рджрд┐рди рдЖрдкрдХреЛ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рднреАрддрд░ рдЖрдпрд╛рдд рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ "рдПрдХ рдмрд╛рд░" рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдФрд░ "рдЕрднреА рдирд╣реАрдВ", рдХреНрдпреЛрдВрдХрд┐ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕-рдХреЙрдореНрдкрд┐рдЯрд┐рдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдкрдХреЛ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдХреЛ 6.0 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА рдЖрдкрдХреЗ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣реЛрдВ рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реЛрдВред рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ред
рдПрдВрдЧреБрд▓рд░ рдЯреАрдо рдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ
рд╕рдВрдкреВрд░реНрдг рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдПрдВрдЧреБрд▓рд░ 6.0 рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣рд╛рдБ
rxjs-tslint
рдирд╛рдордХ рдПрдХ рдмрд╣реБрдд рд╣реА рд╢рд╛рдВрдд tslint рдирд┐рдпрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 4 рдирд┐рдпрдо рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд╕рднреА рдЖрдпрд╛рдд рдФрд░ RxJS рдХреЛрдб рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓
tslint --fix
рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ
tslint
рдореЗрдВ рдПрдХ
fix
рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкрд╛рддрд╛ рд╣реИ! рдЗрд╕реЗ рдФрд░ рднреА рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░
rxjs-tslint
рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░
rxjs-5-to-6-migrate -p src/tsconfig.app.json
ред рдореИрдВрдиреЗ рд╣рдорд╛рд░реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ
rxjs-tslint
рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЗрд╕рдиреЗ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ (рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рджреЛ рдмрд╛рд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЪрд▓рд╛рдПрдВ)ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА README рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
github.com/ReactiveX/rxjs-tslint ред
рдпрджрд┐ рдЖрдк RxJS 6.0 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдмреЗрди рд▓реЗрд╕ рдХреА
рдЕрдЧрд▓реА рд░рд┐рдкреЛрд░реНрдЯ рдПрдирдЬреА-рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдкрд░ рд╕реБрдЭрд╛рддрд╛ рд╣реВрдВред
i18nI18n рд╕реЗ рдЬреБрдбрд╝реА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рдиреАрдп рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, "рд░рдирдЯрд╛рдЗрдо рдкрд░ i18n" рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ (рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИрдВ), рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрдЗрд╡реА рдЗрдВрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдиреАрдЪреЗ)ред
I18n рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдФрд░ рдмрджрд▓рд╛рд╡ рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИред рдореБрджреНрд░рд╛ рдЪреИрдирд▓ рдХреЛ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЕрдм рдпрд╣ рд╕рднреА рдореБрджреНрд░рд╛рдУрдВ рдХреЛ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ 2 рдЕрдВрдХреЛрдВ рддрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╣рд░реАрди рджреАрдирд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 3 рд╕реЗ рдпрд╛ рдЪрд┐рд▓реНрд╣рд╛ рдкреЗрд╕реЛ рдХреЗ рд▓рд┐рдП 0) рдХреЗ рд▓рд┐рдП рдЧреЛрд▓ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдпрд╣ рдорд╛рди рдирдП i18n
getNumberOfCurrencyDigits
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдЬреИрд╕реЗ рдХрд┐
formatDate
,
formatCurrency
,
formatPercent
рдФрд░
formatNumber
рднреА
formatPercent
formatNumber
рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдЪреИрдирд▓реЛрдВ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рдХрд░реЗрдВред
рдПрдирд┐рдореЗрд╢рдирдХреЛрдгреАрдп 6.0 рдореЗрдВ, рдПрдирд┐рдореЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЙрд▓реАрдлрд╝рд┐рд▓
web-animations-js
рдмрд┐рдирд╛ рд╕рдВрднрд╡ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк
web-animations-js
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдХреБрдЫ рдЕрдирдореЛрд▓ рдмрд╛рдЗрдЯреНрд╕ рдЬреАрдд рд╕рдХрддрд╛ рд╣реИ! рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░
element.animate
рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
element.animate
рдПрдкреАрдЖрдИ, рдХреЛрдгреАрдп 6.0 рд╕реАрдПрд╕рдПрд╕ рдХреАрдлреНрд░реЗрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рддрд╛ рд╣реИред
рдХреЛрдгреАрдп рддрддреНрд╡рдПрдВрдЧреБрд▓рд░ рдПрд▓реАрдореЗрдВрдЯреНрд╕ рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдгреАрдп рдШрдЯрдХреЛрдВ рдХреЛ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд╡рд▓ "рдХреЛрдгреАрдп рд▓реИрдм" рдореЗрдВ рдореМрдЬреВрдж рдереА (рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЕрднреА рднреА рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ)ред V6 рдХреЗ рд╕рд╛рде, рдпрд╣ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдЖрддрд╛ рд╣реИ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╣реИ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред
рдПрд▓рд┐рдореЗрдВрдЯрд░реАрдл <рдЯреА>рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдПрдХ рддрддреНрд╡ рд▓рд┐рдВрдХ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
@ViewChild
рдпрд╛
@ViewChildren
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реАрдзреЗ
ElementRef
рдХреЛ рд▓рд╛рдЧреВ рдХрд░
ElementRef
ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЦрд╛рдореА рдпрд╣ рд╣реИ: рдХреЛрдгреАрдп 5.0 рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо рдореЗрдВ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ
ElementRef
рдХреЛ
nativeElement
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП
any
рдкреНрд░рдХрд╛рд░ рдорд┐рд▓реЗрдЧрд╛ред
рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдХреЛрдгреАрдп 6.0 рдореЗрдВ рдЖрдк рдПрд▓рд┐рдореЗрдВрдЯрд░рд┐рдлрд╝ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@ViewChild('loginInput') loginInput: ElementRef<HTMLInputElement>; ngAfterViewInit() {
рдХреНрдпрд╛ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ рдФрд░ рдХреНрдпрд╛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИрдЖрдЗрдП рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╡рд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЖрдкрдХреЛ рдХреНрдпрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП!
preserveWhitespaces
: рдбрд┐рдлрд╝реЙрд▓реНрдЯ false
"рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ" рдЦрдВрдб рдореЗрдВ, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рд╕рдВрд░рдХреНрд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
false
рд╣реИред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдПрдВрдЧреБрд▓рд░ 4.4 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рдпрджрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ - рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдпрд╣рд╛рдВ
рдПрдХ рдкреВрд░реА рдкреЛрд╕реНрдЯ рд╣реИ ред Spoiler: рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
ngModel
рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░реВрдкрдкрд╣рд▓реЗ,
ngModel
рдФрд░
formControl
рд╕рд╛рде рдПрдХ рд╣реА рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдЬ рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдм рдХреЛрдгреАрдп 7.0 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдпрд╣рд╛рдВ рдереЛрдбрд╝рд╛ рднреНрд░рдо рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рддрдВрддреНрд░, рд╢рд╛рдпрдж, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХреЗ
ngModel
рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ (
ngModel
рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдерд╛ рдЬреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди
formControl
рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ, рдЬреЛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдХрд╛рд░реНрдп рдирд╣реАрдВ)ред
рддреЛ рдЕрдм, рдЕрдЧрд░ рд╣рдо рдХреЛрдб рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
<input [(ngModel)]="user.name" [formControl]="nameCtrl">
рддрдм рд╣рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИред
рдЖрдк
always
(
once
),
once
(рдПрдХ рдмрд╛рд░) рдпрд╛
never
(рдХрднреА рдирд╣реАрдВ) рдХреА рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ
always
ред
imports: [ ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }); ]
рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рджреВрд╕рд░реЗ, рдХреЛрдгреАрдп 7 рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ-рдЙрдиреНрдореБрдЦ рд░реВрдкреЛрдВ рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдЗрд╡реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ: рдХреЛрдгреАрдп рдореЗрдВ рдирдпрд╛ (рдирдпрд╛) рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрдиSoooo ... рдпрд╣ 4 рд╡рд╛рдБ рдкреНрд░рдореБрдЦ рдХреЛрдгреАрдп рд░рд┐рд▓реАрдЬрд╝ (2, 4, 5, 6) рд╣реИ, рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдХреЛ рддреАрд╕рд░реА рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ!
рдпрд╛рдж рд░рдЦреЗрдВ: рдХреЛрдгреАрдп рдЖрдкрдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдордХрдХреНрд╖ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЗрд╕ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╣реИред рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдВрдЧреБрд▓рд░ рдореЗрдВ рдЗрд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдХрд╛ рддреАрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ (рдкрд╣рд▓рд╛ рдПрдВрдЧреБрд▓рд░ 2.0 рдХреА рд╢реБрд░реБрдЖрддреА рд░рд┐рд▓реАрдЬ рдореЗрдВ рдерд╛, рдФрд░ рджреВрд╕рд░рд╛ рдПрдВрдЧреБрд▓рд░ 4.0 рдореЗрдВ)ред
рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдХреЗ рдЗрд╕ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд▓реЗрдЦрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрдИ рд╕рдВрдХреЗрддрдХреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ:
- рд╕рдордп рдХрд╛ рдирд┐рд░реНрдорд╛рдг
- рдбрд╛рдпрд▓ рдЖрдХрд╛рд░
рдпрд╣ рд╕рдм рдЕрднреА рднреА рдЧрд╣рд░рд╛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИ, рдФрд░ рдирдпрд╛ Ivy рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ (
tsconfig.json
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ) рдореЗрдВ
tsconfig.json
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
"angularCompilerOptions": { "enableIvy": true }
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рддрдВрддреНрд░ рд╢рд╛рдпрдж рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрднреА рддрдХ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рд╢рд╛рдпрдж рд╡рд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИред
рдЖрдЗрдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдЗрд╡реА рдкреБрд░рд╛рдиреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рд╕реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реИред
рдкреБрд░рд╛рдиреЗ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдбрдЖрдЗрдП рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ
PonyComponent
рдШрдЯрдХ рд╣реИ рдЬреЛ
PonyModel
рдореЙрдбрд▓ (
name
рдФрд░
color
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде) рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЯрдЯреНрдЯреВ рдХреА рдЫрд╡рд┐ (рд╕реВрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░), рд╕рд╛рде рд╣реА рдЯрдЯреНрдЯреВ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
@Component({ selector: 'ns-pony', template: `<div> <ns-image [src]="getPonyImageUrl()"></ns-image> <div></div> </div>` }) export class PonyComponent { @Input() ponyModel: PonyModel; getPonyImageUrl() { return `images/${this.ponyModel.color}.png`; } }
рдХреЛрдгреАрдп 4 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЬреЛ рдХрд┐
ngfactory
ред рдЖрдорддреМрд░ рдкрд░ рд╡рд░реНрдЧ рд╕рдорд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдХреЛрдб рд╕рд░рд▓реАрдХреГрдд):
export function View_PonyComponent_0() { return viewDef(0, [ elementDef(0, 0, null, null, 4, "div"), elementDef(1, 0, null, null, 1, "ns-image", View_ImageComponent_0), directiveDef(2, 49152, null, 0, i2.ImageComponent, { src: [0, "src"] }), elementDef(3, 0, null, null, 1, "div"), elementDef(4, null, ["", ""]) ], function (check, view) { var component = view.component; var currVal_0 = component.getPonyImageUrl(); check(view, 2, 0, currVal_0); }, function (check, view) { var component = view.component; var currVal_1 = component.ponyModel.name; check(view, 4, 0, currVal_1); }); }
рдпрд╣ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдХреЛрдб рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рдирд┐рд░реНрдорд┐рдд DOM рдХреА рд╕рдВрд░рдЪрдирд╛, рдЬрд┐рд╕рдореЗрдВ рддрддреНрд╡реЛрдВ (
figure
, img
, figcaption
) рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ, рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдкрд╛рда рдиреЛрдбреНрд╕ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рджреГрд╢реНрдп рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд░рдгреА рдореЗрдВ DOM рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред - рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдмрджрд▓реЗрдВ; рдЙрдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЛрдб рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рднрд╛рд╡ рдкрд╣рд▓реЗ рдХреЗ рд╕рдорд╛рди рдорд╛рдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реИрдВред рдпрд╣рд╛рдВ,
getPonyImageUrl
рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА getPonyImageUrl
рдЬрд╛рддреА getPonyImageUrl
рдФрд░, рдпрджрд┐ рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЫрд╡рд┐ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдорд╛рди рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рдЯрдЯреНрдЯреВ рдЙрдкрдирд╛рдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ: рдпрджрд┐ рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкрд╛рда рдиреЛрдб рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЙрдкрдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЗрд╡реА рдЬрдирд░реЗрдЯ рдХреЛрдбрдЕрдЧрд░ рд╣рдо Angular 6 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░
enableIvy
рдзреНрд╡рдЬ рдХреЛ
true
рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
true
, рддреЛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдЕрд▓рдЧ
ngfactory
рдирд╣реАрдВ
ngfactory
рдЬрд╛рдПрдЧрд╛; рдЬрд╛рдирдХрд╛рд░реА рд╕реАрдзреЗ рдШрдЯрдХ рдХреЗ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реА рдЬрдорд╛ рд╣реЛ рдЬрд╛рдПрдЧреА (рд╕рд░рд▓реАрдХреГрдд рдХреЛрдб):
export class PonyComponent { static ngComponentDef = defineComponent({ type: PonyComponent, selector: [['ns-pony']], factory: () => new PonyComponent(), template: (renderFlag, component) { if (renderFlag & RenderFlags.Create) { elementStart(0, 'figure'); elementStart(1, 'ns-image'); elementEnd(); elementStart(2, 'div'); text(3); elementEnd(); elementEnd(); } if (renderFlag & RenderFlags.Update) { property(1, 'src', component.getPonyImageUrl()); text(3, interpolate('', component.ponyModel.name, '')); } }, inputs: { ponyModel: 'ponyModel' }, directives: () => [ImageComponent]; });
рдЕрдм рд╕рдм рдХреБрдЫ рдЗрд╕ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИред
template
рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд
ngfactory
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред
template
рдлрд╝рдВрдХреНрд╢рди, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕рдХреЗ рджреЛ рдореЛрдб рд╣реИрдВ:
- рдирд┐рд░реНрдорд╛рдг рдореЛрдб: рдШрдЯрдХ рдмрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕реНрдерд┐рд░ рдбреЛрдо рдиреЛрдбреНрд╕ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдмрд╛рдХреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдЫрд╡рд┐ рд╕реНрд░реЛрдд рдФрд░ рдкрд╛рда рдиреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╣ рдХреНрдпрд╛ рдмрджрд▓рддрд╛ рд╣реИ?рдЕрдм рд╕рднреА рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рд╕реАрдзреЗ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (
@Injectable
,
@Pipe
,
@Directive
рд▓рд┐рдП рд╕рдорд╛рди), рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдПрдВрдЧреБрд▓рд░ рдЯреАрдо рдиреЗ "рд╕реНрдерд╛рдиреАрдпрддрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд" рдХрд╣рд╛ рд╣реИ: рдПрдХ рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреБрди: рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЙрддреНрдкрдиреНрди рдХреЛрдб рдереЛрдбрд╝рд╛ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐, рдХрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрджрд┐ рдЖрд╡реЗрджрди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рддреЛ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдореЗрдВ рддреЗрдЬреА рдЖрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдзреБрдирд┐рдХ рд╕рдВрдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдмрдкреИрдХ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЪреИрдирд▓ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЙрдирдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд░реВрдкрд░реЗрдЦрд╛ рднреА рдЕрдВрддрд┐рдо рд╕реЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рд╣рдореЗрдВ рдХреЛрдгреАрдп рдХреЛрдб рдХреЛ рднрд╛рд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдХрд╛ рд╡рдЬрд╝рди рдХрдо рд╕реЗ рдХрдо 37 kb рд╣реИ, рдЬреЛ рдорд┐рдирд┐рдорд╛рдЗрдЬреЗрд╢рди рдФрд░ рдХрдореНрдкреНрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ рдЬрдм рдЖрдЗрд╡реА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрдЯ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдорд┐рдирд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рдж 7.3 рдХреЗрдмреА рддрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╣реИ, рдФрд░ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд╛рдж - рдХреЗрд╡рд▓ 2.7 рдХреЗрдмреА рддрдХ, рдФрд░ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИред рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд╛рдж TodoMVC рдЖрд╡реЗрджрди - рдХреЗрд╡рд▓ 12.2 рдХреЗрдмреАред рдпрд╣ рдХреЛрдгреАрдп рдЯреАрдо рдХрд╛ рдбреЗрдЯрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЗрд╡реА рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрднреА рднреА рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреИрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЗрд╕
рдмрд╛рддрдЪреАрдд рдХреЛ рдПрдирдЬреА-рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдХреЗ рд╕рд╛рде рджреЗрдЦреЗрдВред
рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ: рдпрджрд┐ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдЗрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ: рдЗрдВрдЬрди рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЖрдЗрд╡реА-рд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛ рджреЗрдЧрд╛, рднрд▓реЗ рд╣реА рд╡реЗ рдЖрдЗрд╡реА рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдВред рдореИрдВ рдЕрднреА рдЗрдВрдЯреАрд░рд┐рдпрд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рднреА рд╡рд┐рд╡рд░рдг рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБрдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдирдП рдЕрд╡рд╕рд░ рд╣реЛрдВрдЧреЗред
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдирд┐рдЬреА рдЧреБрдгрдПрдХ рдирдпрд╛ рдЗрдВрдЬрди рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╕реАрдзреЗ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХ рдХреЗ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реИ: рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдирд┐рдЬреА рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрд╣рд▓реЗ рдЕрд╕рдВрднрд╡ рдерд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╣рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╡реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ (
ngfactory
) рдореЗрдВ рдЧрд┐рд░ рдЧрдПред рдХрд┐рд╕реА рдЕрдиреНрдп рд╢реНрд░реЗрдгреА рд╕реЗ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдпрд╣ рдЕрддреАрдд рдореЗрдВ рд╣реИ: рдЪреВрдВрдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдШрдЯрдХ рдХреЗ рдирд┐рдЬреА рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдгреАрдп рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреА рдХрд┐ рдЗрд╕рдореЗрдВ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрдм рд╕рдВрднрд╡ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ... рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗ! рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдЕрдм рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП DOM рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
i18n рд░рдирдЯрд╛рдЗрдо рдкрд░рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдирдпрд╛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдЕрд╡рд╕рд░ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ "рд░рдирдЯрд╛рдЗрдо рдкрд░ i18n" рджреЗрддрд╛ рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд╡рд╣ рдЕрднреА рднреА рдХрд╛рдлреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рдХрдорд┐рдЯреНрд╕ рджреЗрдЦреЗ, рдФрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреЗрдд рд╣реИ!
рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА i18n рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ - рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде JSON рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ, рдФрд░ рдХреЛрдгреАрдп рдмрд╛рдХреА рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛!
рдПрдУрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдирдкреАрдПрдо рдореЗрдВ рдЬрд╛рд░реА рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛.рдЬреЙрди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдПрдУрдЯреА рдХреЛрдб рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджреБрдЦрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдЬреБрдбрд╝реА рд▓рд╛рдЧрддреЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдкрд░ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдЖрдЗрд╡реА рдХреЗ рд╕рд╛рде, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХ рдЕрдм рдПрдирдкреАрдПрдо рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЕрдкрдирд╛ рдПрдУрдЯреА рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХреЗрдВрдЧреЗ!
рдмреЗрд╣рддрд░ рд╕реНрдЯреИрдХ рдЯреНрд░реИрдХрдЕрдм рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рджреЗрдиреЗ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ - рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреА рдПрдХ рд╕рд╛рдл-рд╕реБрдерд░реА рддреНрд░реБрдЯрд┐ рдЙрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд░реЗрдЦрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╣реБрдЖред рдЖрдк рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдгреАрдп рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
NgModule
рдЧрд╛рдпрдм рд╣реЛ NgModule
?рдпрд╣ рдЕрднреА рднреА рдПрдХ рджреВрд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ рдмрд┐рдирд╛ NgModules рдХреЗ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рд▓рдХреНрд╖рдг рдЯреНрд░реА-рд╢реЗрдХреЗрдмрд▓ рдкреНрд░рджрд╛рддрд╛ рд╣реИрдВ, рдФрд░ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдЖрдИрд╡реА рдХреЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмреБрдирд┐рдпрд╛рджреА рдмреНрд▓реЙрдХ рд╣реИрдВ рдЬреЛ рдзреАрд░реЗ-рдзреАрд░реЗ NgModules рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ (рдпрд╛, рдХрдо рд╕реЗ рдХрдо, рдЙрдиреНрд╣реЗрдВ рдХрдо рдЙрддреНрддрд░рджрд╛рдпреА рдмрдирд╛рддреЗ рд╣реИрдВ)ред рд╕рдЪ рд╣реИ, рдпрд╣ рд╕рдм рдЕрднреА рднреА рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣реИ, рд╣рдо рдзреИрд░реНрдп рд░рдЦреЗрдВрдЧреЗред
рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдХрдИ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдирд╣реАрдВ рд╣реЛрдВрдЧреА, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЖрдЗрд╡реА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ - рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ!