文件 v0.6.19

事件綁定

本頁說明以 @事件 把 DOM 事件接到 event 選項中的處理函式。

寫法

<div id="app">
  <button @click="save">Save</button>
  <input type="text" @input="typing" />
</div>

<script>
  const app = new QUI({
    id: "app",
    data: { text: "" },
    event: {
      save: (e) => console.log("saved", app.data.text),
      typing: (e) => {
        app.data.text = e.target.value;
      },
    },
  });
</script>
前綴 例 說明
@ @click 標準寫法
qe- qe-click 等價寫法

@click="save" 會被轉成 element.onclick = app.event.save,處理完成後移除 @click 屬性。

規則

規則 說明
事件名稱 必須是元素有對應 on* 屬性的原生事件(click、input、change、submit、keyup 等);自訂事件不會觸發
處理函式參數 只收到 Event;以 function 宣告時 this 為該元素
每種事件一個處理函式 以屬性指派,同一元素同一事件只保留一個
名稱查找 屬性值先當資料路徑查找,取得的值作為函式名稱;找不到時直接以屬性值為名稱
名稱不存在 指派為 undefined,點擊沒有反應也不報錯
:@click 不支援,屬性會被移除且不綁定

在迴圈中取得項目

處理函式拿不到 :for 的項目,請把識別值寫進 data-* 屬性:

<li :for="user in users">
  <button :data-id="user.id" @click="remove">Remove</button>
</li>

<script>
  const app = new QUI({
    id: "app",
    data: { users: [{ id: 1 }, { id: 2 }] },
    event: {
      remove: (e) => {
        const id = +e.target.dataset.id;
        app.data.users = app.data.users.filter((u) => u.id !== id);
      },
    },
  });
</script>

在 QuickUI 以外使用

app.event 保留原始的函式集合,可以指派給動態建立的元素:

const button = document.createElement("button");
button.onclick = app.event.save;
app.body.append(button);
EN