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

рдФрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреАрдЖрдИ рд╣реИ, рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
<ngx-avatar facebookId="1508319875"></ngx-avatar> <ngx-avatar src="assets/avatar.jpg"></ngx-avatar> <ngx-avatar name="John Doe"></ngx-avatar>
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдгреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
ng new avatar-lib --minimalN npm i ngx-avatar --save
рдкреИрдХреЗрдЬ рдХреЛ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component';
рдЕрдм рдПрдХ рд╕рд░рд▓ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `AvatarModule` рдЕрдкрдиреЗ рдПрдХрдорд╛рддреНрд░ рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
ng gc avatar
import { Component, ViewEncapsulation, Input } from '@angular/core'; @Component({ selector: 'app-avatar', template: ` <ngx-avatar [name]="name"></ngx-avatar> `, styles: [], encapsulation: ViewEncapsulation.ShadowDom }) export class AvatarComponent { @Input() name: string; constructor() { } }
рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдХ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╣рдо рдЗрд╕ рд╕рдм рд╕реЗ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдШрдЯрдХ рдмрдирд╛рдПрдВрдЧреЗред рд╣рдорд╛рд░реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЛрдгреАрдп рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
ng add @angular/elements
рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрдорд╛рдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрддреНрд╡реЛрдВ рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ред
"scripts": [{ "input": "node_modules/document-register-element/build/document-register-element.js" }]
рдкрд░рд┐рдгрд╛рдореА app.module.ts:
import { BrowserModule } from '@angular/platform-browser'; import { NgModule, Injector } from '@angular/core'; import { createCustomElement } from '@angular/elements'; import { AvatarComponent } from './avatar.component'; import { AvatarModule } from 'ngx-avatar'; @NgModule({ declarations: [AvatarComponent], imports: [AvatarModule, BrowserModule], entryComponents: [AvatarComponent] }) export class AppModule { constructor(private injector: Injector) {
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╣рдореЗрдВ рдпрд╣ рд╕рдм рдЕрдЪреНрдЫрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд▓реЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЛ рдПрдХ js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд░реЗрдЧрд╛:
const fs = require('fs-extra'); const concat = require('concat'); (async function build() { const files = [ './dist/avatar-lib/runtime.js', './dist/avatar-lib/polyfills.js', './dist/avatar-lib/scripts.js', './dist/avatar-lib/main.js' ]; await fs.ensureDir('elements'); await concat(files, 'elements/avatar-lib.js'); })();
рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ! рдпрд╣ рдХреЗрд╡рд▓ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдРрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред jsonред
"build:elements": "ng build --prod --output-hashing none && node build.js"
рдЦреИрд░, рдпрд╣ рдмрд╛рдд рд╣реИ! рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА js рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓реА 'avatar-lib.js' рд╡рдЬрди ~ 221kB рдФрд░ ~ 60kb рдЧрдЬрд╝рд┐рдк рдореЗрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХрдИ рдФрд░
рдХреЛрдгреАрдп / рдХреЛрд░ рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдирдПрдХреНрд╕рдПрдХреНрд╕-рдЕрд╡рддрд╛рд░ рдХрд╛ рд╡рдЬрд╝рди рд▓рдЧрднрдЧ 16.8kB рдФрд░ 5.4kB рд╣реИред рдЕрд╡рддрд╛рд░-lib.js рдХреЗ рд╡рдЬрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЖрдЗрд╡реА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдЗрд╡реА рдЗрд╕ рдХреНрд╖рдг рддрдХ рдЬрд╛рд░реА рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдореИрдВ рдЕрдм рдЬреЛ рдЙрдкрд▓рдмреНрдз рд╣реИ рдЙрд╕рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░реВрдВрдЧрд╛)ред
рд╣рдореЗрдВ рдХреЛрдгреАрдп рддрддреНрд╡реЛрдВ рдиреЗ рдХреНрдпрд╛ рджрд┐рдпрд╛?
рдпрд╣ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЖрд╕рд╛рди рдПрдк рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рднреА рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рдереЗ:
рдЬрд┐рдпрд╛ рд▓реА рджреНрд╡рд╛рд░рд╛ рдПрдХ рд▓реЗрдЦ (рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдм рдЬрд╝реЛрди рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ) ред
рд╣рдо рдЕрдкрдиреЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рдЕрдиреНрдп рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ Vue рдореЗрдВред рд╣рдо рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЕрд╡рддрд╛рд░-рд▓рд┐рдм рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдорд╛рдирдХ vue bings рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
<avatar-lib :name = 'myName'></avatar-lib>
рдЖрдЙрдЯрдкреБрдЯ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
Vue рдбреЗрдореЛ:
https://github.com/Jamaks/angular-element/tree/master/ang-el-vueрдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдордп рд╣реИ! рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:
<avatar-lib name = {this.myName}></avatar-lib>
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рдбреЗрдореЛрдЦреИрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛рдлрд┐рд▓рд╣рд╛рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП:
https://angular.io/guide/elements#browser-support-for-custom-elementshttps://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/defineрдмреЗрд╢рдХ, рдпрд╣ рдЖрдкрдХреЛ рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпреВрдЖрдИ рдШрдЯрдХ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рд╕реЗ рди рдЬреБрдбрд╝реЗ рд╣реЛрдВ рдФрд░ рд╕рдорд╛рди рдкреНрд░рддреНрдпрдп рди рд╣реЛрдВ: рдПрдирдЬреА-, рдПрдирдЬреАрдПрдХреНрд╕-, рд╡реА-, рд░рд┐рдПрдХреНрд╢рди-, рдЖрд░рд╕реА- рдЗрддреНрдпрд╛рджрд┐ред
рдмреЛрдирд╕!рдШрдЯрдХ рдХреЗ рдЖрдХрд╛рд░ (ngx-avatar) рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рдЕрднреА рднреА ngtsc, ngcc рдХреЛ рдлреАрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд░реЛрд▓рдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд░рд╣реЗ, рдХреНрдпреЛрдВрдХрд┐ рдЪрдпрдирд┐рдд рдШрдЯрдХ рдХреЛ рдХрдИ рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╣рддрд╛рд╢, рдиреЗ рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдХреБрдЫ рдЕрдВрд╢ рдмрдирд╛рдпрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реБрдП - рдлрд┐рд▓рд╣рд╛рд▓ (7.1.2), рдкреБрд╕реНрддрдХрд╛рд▓рдп ~ 96kb рдФрд░ ~ 26 gzip рдореЗрдВ рдерд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рд╕рд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдереАрдВ, рдФрд░ рдореЗрд░реЗ рд░реЛрд▓рдЕрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ 3kb рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЖрдЗрд╡реА рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рджреМрд░рд╛рди рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдЬрдм рд╡реЗ рд╡реЗрдмрдкреИрдХ (рд╕реАрдПрд▓рдЖрдИ) рдХреЗ рд▓рд┐рдП рдПрдирд╕реАрд╕реА рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдЖрдк
рдпрд╣рд╛рдВ рдкрд░ рдХреЛрдгреАрдп рджреБрдирд┐рдпрд╛ рдХреЗ рдЫреЛрдЯреЗ рдкреНрд░рдпреЛрдЧ рдФрд░ рдЕрдВрджрд░реВрдиреА рдЬрд╛рдирдХрд╛рд░реА рднреА
рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред