Sobes.tech
Middle

Ինչպես կարելի է իրականացնել երկու ուղղությամբ կապը input տարրին:

sobes.tech AI

Պատասխան AI-ից

  1. Անհատական:

    Օգտագործելով JavaScript, կապել input-ի արժեքը փոփոխականին և թարմացնել input-ը փոփոխականի փոփոխության դեպքում: Հետևել input իրադարձությանը input տարրին և թարմացնել փոփոխականը արժեքի փոփոխության դեպքում:

    let myValue = '';
    
    const inputElement = document.getElementById('myInput');
    const displayElement = document.getElementById('display');
    
    inputElement.addEventListener('input', (event) => {
      myValue = event.target.value;
      displayElement.textContent = myValue; // Ներկայացման թարմացում
    });
    
    // Օրինակ՝ փոփոխականի թարմացում այլ վայրից, որը պետք է թարմացնի input-ը
    function updateValue(newValue) {
      myValue = newValue;
      inputElement.value = myValue; // Input-ի թարմացում
      displayElement.textContent = myValue; // Ներկայացման թարմացում
    }
    
  2. Ֆրեյմվորկների/բիբլիոթեկների միջոցով:

    Ֆրեյմվորկներ, ինչպիսիք են Angular, Vue.js, React (կառավարվող կոմպոնենտների օգտագործմամբ), տրամադրում են ներքին մեխանիզմներ երկկողմանի կապի համար:

    • Angular: [(ngModel)]="myValue"
    • Vue.js: v-model="myValue"
    • React: Օգտագործում value և onChange՝ վիճակի կառավարելու համար:
    import React, { useState } from 'react';
    
    function MyComponent() {
      const [myValue, setMyValue] = useState('');
    
      const handleChange = (event) => {
        setMyValue(event.target.value);
      };
    
      return (
        <div>
          <input type="text" value={myValue} onChange={handleChange} />
          <p>Արժեքը: {myValue}</p>
        </div>
      );
    }
    
  3. Proxy API-ի օգտագործում:

    Ստեղծել Proxy օբյեկտ, որը արձագանքում է հատկության փոփոխություններին և թարմացնում input-ի արժեքը, ինչպես նաև հետևում է input իրադարձությանը input տարրին և թարմացնում Proxy հատկությունը:

    const inputElement = document.getElementById('myInput');
    const data = { value: '' };
    
    const reactiveData = new Proxy(data, {
      set(target, property, newValue) {
        if (property === 'value') {
          target[property] = newValue;
          inputElement.value = newValue; // Input-ի թարմացում
          document.getElementById('display').textContent = newValue; // Ներկայացման թարմացում
          return true;
        }
        return false;
      }
    });
    
    inputElement.addEventListener('input', (event) => {
      reactiveData.value = event.target.value; // Proxy հատկության թարմացում
    });
    
    // Օրինակ՝ Proxy հատկության թարմացում այլ վայրից
    // reactiveData.value = 'Նոր արժեք';
    
  4. Custom Elements-ի օգտագործում Shadow DOM և շաբլոնների հետ:

    Ստեղծել օգտագործողի սահմանած տարր, որը ինկապսուլացնում է input-ը և իրականացնում կապի տրամաբանությունը իր Shadow DOM-ում:

    class TwoWayInput extends HTMLElement {
      constructor() {
        super();
        const shadowRoot = this.attachShadow({ mode: 'open' });
        shadowRoot.innerHTML = `
          <input type="text" />
          <p id="display"></p>
        `;
    
        this.inputElement = shadowRoot.querySelector('input');
        this.displayElement = shadowRoot.getElementById('display');
    
        this._value = '';
    
        this.inputElement.addEventListener('input', (event) => {
          this.value = event.target.value;
        });
      }
    
      get value() {
        return this._value;
      }
    
      set value(newValue) {
        this._value = newValue;
        this.inputElement.value = newValue;
        this.displayElement.textContent = newValue;
        this.dispatchEvent(new CustomEvent('change', { detail: this._value }));
      }
    
      connectedCallback() {
        // Միգուցե, սկզբնական արժեքը ստանալ որպես ատրիբուտ
        if (this.hasAttribute('initial-value')) {
          this.value = this.getAttribute('initial-value');
        }
      }
    }
    
    customElements.define('two-way-input', TwoWayInput);