双方向データバインド


vou mostrar como fazer um双方向データ結合sem usar nenhum frame s s . com JavaScript puro.
双方向データバインディング、O terterdado、Reatividade DOS Elementtos Na - Suaインターフェースです.o seja、o que acacteceなしDOM(ビュー)、refleteなしJavaScript(モデル)、e o que acontece JavaScript(モデル)、refleteなしDOM(見解).

例示的なVO dispobilizar dois bot - ne - um - um - incrementar o valor e outra para decrementar , calker e outra para decrementar , calker e ouo para decrementar , Quarker Intera Specialo o com Bos Hes es Temos a atualiza plaso o do do dom que es exbida no input e tamb es m atualiza o model javascript


1 -クリエo projeto
クレア沼パスタEネラadicione OS Arquivosインデックス.JSインデックス.HTML .
2 . html
HTML Temo O seguinte c didi abaixo :
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- CSS only -->
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
    integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
  <title>Two way data binding</title>
</head>

<body>

  <div class="container py-5">
    <form class="row g-3">
      <div class="col-auto">
        <input min="0" type="number" class="form-control" id="ipt-number" placeholder="Número" disabled>
      </div>
      <div class="col-auto">
        <button type="button" class="btn btn-success mb-3" onclick="increment()">(+)</button>
        <button type="button" class="btn btn-danger mb-3" onclick="decrement()">(-)</button>
      </div>
    </form>
  </div>

  <script src="index.js"></script>
  <!-- JavaScript Bundle with Popper -->
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
    integrity="sha384-U1DAWAznBHeqEIlVSCgzq+c9gqGAJn5c/t99JyeKa9xxaYpSvHU5awsuZVVFIhvj" crossorigin="anonymous">
  </script>
</body>

</html>
  • Optei Por usar Oの推定Bootstrap , 閉じるこの動画はお気に入りから削除されています.
  • CSS
      <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
    
    ジャバスクリプト
      <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-U1DAWAznBHeqEIlVSCgzq+c9gqGAJn5c/t99JyeKa9xxaYpSvHU5awsuZVVFIhvj" crossorigin="anonymous">
    
  • o c c didi lum - umは、入力されていないPOIS TEM OM入力を無効にします.
  • として、楽しみとしてとしては、o dispaladas pelo evento onclickデclie em qualkerのボットを使用してください.
  • 3 - JavaScript
    は、JavaScriptは、e nela que vamos usarの所有者はObject.defineProperty パラ操作のnosso objeto que ser - atualizado de acordo com o valorはe - por aを入力します.
    o o c didi pode ser visto abaixo :
    const model = {
      value: ""
    };
    
    load = () => {
      const number = document.getElementById("ipt-number");
      number.value = "0";
    
      Object.defineProperty(model, "prop", {
        get: function () {
          console.log("Getter called");
          return this.value;
        },
        set: function (value) {
          console.log("Setter called", value);
          this.value = value;
          printVal();
        }
      });
    };
    
    increment = () => {
      let val = parseInt(model.prop || 0) + 1;
      model.prop = val;
    };
    
    decrement = () => {
      let val = parseInt(model.prop || 0) - 1;
      if (val < 0) val = 0;
      model.prop = val;
    };
    
    printVal = () => {
      const el = document.getElementById("ipt-number");
      el.value = model.prop;
    };
    
    load();
    
  • Load : nessa fun pose o o temos a inicializa poso o o入力com o valor zero e a a a a o o valor zero e a a a a a a a a a o o o do do do do do a do to obrav are a da posededade objectを実行します.定義
  • オブジェクト.DefineProperty : como Primeiro PARメトロメトロ定義o objeto que serは、所有者としてDefinidaである.quando queremos atualizar o objetoモデルusamos o set e para obter o valor atususos o o get ;
  • 増分:Nessa楽しいMesは、o a a a o o o de incrementa o valor do objetoモデル、pegamos o valorのatualモデル.prop e depois de executar alguma regra no caso uma soma com 1 atualizamos o nosso objetoモデルモデルprop = val com o novo valor ;
  • デクリメント:Nessa楽しみの巣は、oのいずれかのAは、o decrementa o valor do objetoモデル、entのo o pegamos o valorのatual doモデル、pegamos o valorのatualモデル.prop e depois de executar alguma regra no caso o valor atmenia 1 atualizamos o nosso objetoモデルモデルprop = val com o novo valor ;
  • Printval : Nessa Fun Mesory O o Paro Cada A ' s o o de Deplomentar On decrementar o m ' todo - set - disparado para atualizar o dom
  • o o go dio pode ser obtido noGithub .