рдЬреЗрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЕрдкрдиреА рд░реВрдкрд░реЗрдЦрд╛ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд▓реЗрдЦрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЬрдм рд╡рд╣, рдХрдИ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, jQuery рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, Angular.js рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдЬреЛ рдЙрд╕рдиреЗ рджреЗрдЦрд╛ рд╡рд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рддрдм Vue.js рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдЙрдиреНрд╣реЗрдВ рджреЛ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рдЕрдкрдиреА рдкреНрд░рдгрд╛рд▓реА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкреЗрд╢реЗрд╡рд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЙрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬреНрдЮрд╛рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЖрдзреБрдирд┐рдХ рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рдореВрд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ HTML рддрддреНрд╡реЛрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдФрд░ рджреЛ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

рдирддреАрдЬрддрди, рд░реВрдкрд░реЗрдЦрд╛ рд╣рд░ рддрдереНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреА рдХрд┐ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдХреЛрдб рд╕реЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рджреЛрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░реЙрдХреНрд╕реА рдкреИрдЯрд░реНрди


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

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

var account = {    balance: 5000 } var bank = new Proxy(account, {    get: function (target, prop) {        return 9000000;    } }); console.log(account.balance); // 5,000 ( ) console.log(bank.balance);    // 9,000,000 (   ) console.log(bank.currency);   // 9,000,000 (  ) 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, account рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдИ рдЧрдИ рдЦрд╛рддрд╛ рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП bank рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЧреЗрдЯреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдХреЗ рдмрдЬрд╛рдп 9,000,000 рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдЧреБрдг рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рд╕реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

 var bank = new Proxy(account, {   set: function (target, prop, value) {       //      0       return Reflect.set(target, prop, 0);   } }); account.balance = 5800; console.log(account.balance); // 5,800 bank.balance = 5400; console.log(account.balance); // 0 (  ) 

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

рд░рд┐рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╕рд┐рд╕реНрдЯрдо рдЙрджрд╛рд╣рд░рдг


рдЕрдм рдЬрдм рд╣рдо рдкреНрд░реЙрдХреНрд╕реА рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдкрдирд╛ JS рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред

рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Angular.js рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдПрдХ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдирддреАрдЬрддрди, рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рддрддреНрд╡реЛрдВ рдХреЗ рдмрдВрдзрди рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред

рдпрд╣рд╛рдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 <div ng-controller="InputController">   <!-- "Hello World!" -->   <input ng-bind="message"/>     <input ng-bind="message"/> </div> <script type="javascript"> function InputController () {     this.message = 'Hello World!'; } angular.controller('InputController', InputController); </script> 

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

рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рддреНрд╡рд░рд┐рдд рдХрд░рдирд╛


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЧреБрдг рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди (рдирд┐рдпрдВрддреНрд░рдХ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

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

 var controllers = {}; var addController = function (name, constructor) {   //     controllers[name] = {       factory: constructor,       instances: []   };     // ,     var element = document.querySelector('[ng-controller=' + name + ']');   if (!element){      return; //  ,      }     //         var ctrl = new controllers[name].factory;   controllers[name].instances.push(ctrl);     //   ..... }; addController('InputController', InputController); 

рдиреАрдЪреЗ рдПрдХ "рд╣реЛрдордореЗрдб" рдЪрд░ controllers рдХреА рдШреЛрд╖рдгрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ controllers рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕рднреА controllers рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ addController рдХрд╣рд╛ addController ред

 var controllers = {   InputController: {       factory: function InputController(){           this.message = "Hello World!";       },       instances: [           {message: "Hello World"}       ]   } }; 

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

рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ


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

 var bindings = {}; //  : element   DOM,   Array.prototype.slice.call(element.querySelectorAll('[ng-bind]'))   .map(function (element) {       var boundValue = element.getAttribute('ng-bind');       if(!bindings[boundValue]) {           bindings[boundValue] = {               boundValue: boundValue,               elements: []           }       }       bindings[boundValue].elements.push(element);   }); 

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

рдпрд╣рд╛рдБ bindings рдЪрд░ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

     var bindings = {       message: {           //   :           // controllers.InputController.instances[0].message           boundValue: 'Hello World',           // HTML- (   ng-bind="message")           elements: [               Object { ... },               Object { ... }           ]       }   }; 

рдирд┐рдпрдВрддреНрд░рдХ рдЧреБрдгреЛрдВ рдХрд╛ рджреНрд╡рд┐рдкрдХреНрд╖реАрдп рдмрдВрдзрди


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

рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рд╕реЗ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, Vue.js рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рд╣рдо рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд┐рдпрдВрддреНрд░рдХ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реЗрдЯрд░ рдХреЛ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ:

 //  : ctrl -    var proxy = new Proxy(ctrl, {   set: function (target, prop, value) {       var bind = bindings[prop];       if(bind) {           //    DOM,               bind.elements.forEach(function (element) {               element.value = value;               element.setAttribute('value', value);           });       }       return Reflect.set(target, prop, value);   } }); 

рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдореВрд▓реНрдп рдХреЛ рдмрд╛рдзреНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЙрдХреНрд╕реА рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рджреЗрдЧрд╛ред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ input рддрддреНрд╡реЛрдВ рдХреЗ рдмрдВрдзрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ value рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣рд╛рдВ рд╕реЗрдЯ рд╣реИред

рддрддреНрд╡ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЬрд╡рд╛рдм


рдЕрдм рд╣рдореЗрдВ рдмрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдХрд┐ рдЬрдм рд╡реЗ рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рддреЛ DOM рддрддреНрд╡ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред

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

 Object.keys(bindings).forEach(function (boundValue) {   var bind = bindings[boundValue];     //          bind.elements.forEach(function (element) {     element.addEventListener('input', function (event) {       proxy[bind.boundValue] = event.target.value; //  ,          });   }) }); 

рдкрд░рд┐рдгрд╛рдо


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

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдпрджрд┐ рдЖрдк рдкреЗрд╢реЗрд╡рд░ рд░реВрдк рд╕реЗ рдЖрдзреБрдирд┐рдХ рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдкрдиреЗ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдорджрдж рдорд┐рд▓реАред

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


All Articles