[Alpine.js] 魔法屬性

除了 $el 是例外,所有的魔法屬性 x-data 中都無法使用,因為元素還未初始化。

$el

<div x-data>
    <button @click="$el.innerHTML = 'foo'">這裡的內容會取代為「foo」</button>
</div>

$el 是可用來取得元件根 DOM 節點的魔法屬性。

 

$refs

範例:

<span x-ref="foo"></span>

<button x-on:click="$refs.foo.innerText = 'bar'"></button>

$refs 是可用來取得元件內以 x-ref 標記的 DOM 元素之魔法屬性。如果有需要取得 DOM 元素資訊或操作的話可以使用。

 

$event

範例

<input x-on:input="alert($event.target.value)">

$event 是可在事件監聽器內取得瀏覽器原生「Event」物件的魔法屬性。

備註:$event 屬性只可在 DOM 運算式中使用。

若有需要在 JavaScript 函式中存取 $event,則可以直接將 $event 傳入:

<button x-on:click="myFunction($event)"></button>

 

$dispatch

範例

<div @custom-event="console.log($event.detail.foo)">
    <button @click="$dispatch('custom-event', { foo: 'bar' })">
    <!-- 點擊後會 console.log "bar" -->
</div>

有關事件傳播 (Event Propagation)

請注意,由於 Event Bubbling (英語),當有需要截取從相同層級節點觸發的事件時,則需要加上 .window 修飾詞:

範例:

<div x-data>
    <span @custom-event="console.log($event.detail.foo)"></span>
    <button @click="$dispatch('custom-event', { foo: 'bar' })">
<div>

上述範例無效,因為 custom-event 觸發的時候,會傳播到共同母級節點,即 div

分派至元件

也可以通過剛才那個技巧來在元件間互相溝通:

範例:

<div x-data @custom-event.window="console.log($event.detail)"></div>

<button x-data @click="$dispatch('custom-event', 'Hello World!')">
<!-- 點擊後會 console.log "Hello World!". -->

$dispatch 是建立 CustomEvent 並在內部使用 .dispatchEvent() 分派的捷徑方法。還有其他許多通過自定事件來在元件間傳遞資料的例子。請 參考此處 (英文) 以瞭解更多有關不同瀏覽器中的 CustomEvent 資訊。

可以注意到放在第二個參數的資料 $dispatch('some-event', { some: 'data' }),在新事件上可通過「detail」屬性來取得:$event.detail.some。將自定事件資料附加到 .detail 屬性是在瀏覽器中 CustomEvent 的標準實踐。更多資訊請 參考此處 (英文)

也可以使用 $dispatch() 來觸發 x-model 繫結的資料更新。如:

<div x-data="{ foo: 'bar' }">
    <span x-model="foo">
        <button @click="$dispatch('input', 'baz')">
        <!-- 點擊按鈕後,`x-model` 會抓到 Bubbing 的「input」事件,並將 foo 更新為「baz」 -->
    </span>
</div>

 

備註:$dispatch 屬性只可在 DOM 運算式中使用。

若有需要在 JavaScript 函式中存取 $dispatch,則可以直接將 $dispatch 傳入:

<button x-on:click="myFunction($dispatch)"></button>

 

$nextTick

範例:

<div x-data="{ fruit: 'apple' }">
    <button
        x-on:click="
            fruit = 'pear';
            $nextTick(() => { console.log($event.target.innerText) });
        "
        x-text="fruit"
    ></button>
</div>

通過 $nextTick 魔法屬性則可以在 Alpine 做出 DOM 更新 之後 才執行指定的運算式。適用於需要在資料反應到 DOM 上後才要與 DOM 互動的情況。

 

$watch

範例

<div x-data="{ open: false }" x-init="$watch('open', value => console.log(value))">
    <button @click="open = ! open">開啟/關閉</button>
</div>

可通過 $watch 魔法方法來「監聽 (Watch)」元件屬性。在上述例子中,當按鈕點擊後 open 會該表,接著會指定給定的回呼並以新的值來執行 console.log

 

 

 

 

 

 

課程推薦

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

《PChome雜誌》攜手 5 位在 AI 領域的專業講師,打造上述 6 堂實用課程,教你學會時下最好用的 AI 工具,導入生成式 AI 來產製工作內容,改造並升級你的工作流程。

輸入折扣碼 ZERO2024 還可以額外獲得 NT$400 優惠喔。

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

本課程專為希望深入了解 HTML 並有效結合 SEO 策略的學員設計。我們將重點放在 HTML 的深度學習與應用上,同時穿插介紹如何透過搜索引擎優化提升網站能見度。透過即時互動式的直播教學,加上 ChatGPT 的輔助,您將學習到如何建立一個結構優良、美觀且符合 SEO 標準的網站。這不僅會提升網站的用戶體驗,還會大幅提高網站的搜索引擎排名,進而增加訪客流量和潛在客戶。
用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

在快速變遷的職場中,提升競爭力成為關鍵。透過引領潮流的AI技術,ChatGPT和Midjourney將助您勇攀高峰。無論您是AI新手還是專家,這個課程將引導您從入門到精通,解密AI的奧秘,並學習如何運用於職場。
GitHub Copilot AI 程式碼編輯工具應用實務班

GitHub Copilot AI 程式碼編輯工具應用實務班

讓學員瞭解有效地使用該工具來加速開發流程、提高程式碼品質和生產力。課程重點放在以 JavaScript 程式語言為例,介紹 Copilot 的基本原理、使用方法和最佳實踐。

輸入折扣碼 TC1456JA 還可以額外獲得 NT$500 優惠喔。

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

掌握Clipchamp AI的操作技巧,靈活運用Clipchamp AI進行影片編輯和創作,實現創意表達和傳播目的。

輸入折扣碼 TC1451JAN 還可以額外獲得 NT$500 優惠喔。

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

Looker Studio除了可協助使用者監控網站流量、廣告成效、選擇匯入資源的管道之外,還可以將數據資料多平台整合、數據報表即時更新、數據範本可重複套用的效益,透過自動化系統,將數據全部匯入同一個報表平台,是企業不可或缺的重要工具。

輸入折扣碼 TC1270JIA 還可以額外獲得 NT$500 優惠喔。

和我們交流

加入我們的社群,裡面會有一些技術的內容、有趣的技術梗,以及職缺的分享,歡迎和我們一起討論。