200-рд▓рд╛рдЗрди рдХреЛрдгреАрдп рд╕рдВрдХрд▓рдХ

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

рдХрд╛рд░реНрдп


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреЛрдгреАрдп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╣реИ:

const data = { project: 'MySuperProject', userName: 'Roman', role: 'admin', projectLink: 'https://example.com/my-super-projectproject' } 

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

  <body>  !  {{project}}    <a href="{{projectLink}}">3D   </a> <div *ngIf="role == 'admin'">       <a href="{{projectLink}}?mode=edit"></a> </div> </body> 

рдПрдирдЬреА-рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп


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

рдПрдирдЬреА-рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:

рдПрдирдкреАрдПрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

 npm install --save @quanterion/ng-template 

рдпрд╛ рдпрд╛рд░реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

 yarn add @quanterion/ng-template 

рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 import { compileTemplate, htmlToElement } from '@quanterion/ng-template'; async test() { let data = { name: 'Roman' }; let element = htmlToElement(`<div>{{name}}</div>`); await compileTemplate(element, data); alert(element.outerHTML); } 

рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛


  1. рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ {{рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐}} рдЪрд░ рдФрд░ рдХреЙрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде
  2. рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдПрдирдЬреА-рдЯреЗрдореНрдкрд▓реЗрдЯ
  3. рдХрдВрдЯреЗрдирд░ рдПрдирдЬреА-рдХрдВрдЯреЗрдирд░
  4. рд╕реНрдерд┐рддрд┐рдпрд╛рдБ * ngIf + * ngIf рдХреЗ рд░реВрдк рдореЗрдВ
  5. рдЪрдХреНрд░ * ngFor
  6. рд╢реИрд▓рд┐рдпрд╛рдБ [style.xxx] = "value" рдФрд░ [style.xxx.px] = "value"
  7. рд╕рд╢рд░реНрдд рдХрдХреНрд╖рд╛рдПрдВ [class.xxx] = "рдореВрд▓реНрдп"
  8. рдорд╛рди рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╡реЗрдзрд╢рд╛рд▓рд╛ {{рдирд╛рдо $}}

рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП ng-template.spec.ts рдкрд░реАрдХреНрд╖рдг рджреЗрдЦреЗрдВред

рдПрд╡рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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

 const data = { a: 1, b: () => 4 }; const expression = 'a+b()'; eval('a =1; b = ??;' + expression); 

рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ

рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рдмрдирд╛рдХрд░ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлреАрд▓реНрдб рдирд╛рдо рд╣реЛрдВ:

 const data = { a: 1, b: () => 4 }; let entries = [] for (let property in data ) { entries.push([property, data[property]]) } const params = entries.map(e => e[0]); const fun = new Function('code', ...params, `return eval(code)`); const args = entries.map(e => e[1]); const expression = 'a+b()'; const result = fun.call(undefined, expression , ...args); 

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

рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ

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


All Articles