市面上大多數關於Vue.js自定義指令的文章都在講語法,很少講實際的應用場景和用例,以致於即便明白了怎么寫,也不知道怎么用。本文不講語法,就講自定義指令的用法。
自定義指令是用來操作DOM的。盡管Vue推崇數據驅動視圖的理念,但並非所有情況都適合數據驅動。自定義指令就是一種有效的補充和擴展,不僅可用於定義任何的DOM操作,並且是可復用的。
比如谷歌圖片的加載做得非常優雅,在圖片未完成加載前,用隨機的背景色占位,圖片加載完成后才直接渲染出來。用自定義指令可以非常方便的實現這個功能。
效果:
自定義指令的第二用處是用於集成第三方插件。我們知道任何軟件開發領域都可以分為四層:底層是原生的API,上層是通用框架,再上層是通用組件,最上層才是具體的業務代碼。一個通用框架,必須搭配一套完整的通用組件,才能真正奠定其江湖地位。
在前端開發領域,以前的通用框架是jQuery,jQuery以及基於jQuery構建的通用組件形成了一個龐大的生產系統。現在的通用框架是Angular、React和Vue,每個框架都需要基於自身構建新的組件庫。自定義指令好就好在:原先的那些通用組件,無論是純js的也好,基於jQuery的也好,都可以拿來主義直接吸收,而不需要改造或重構。
比如寫文檔通常會用到highlight.js,我們可以直接將其封裝為一個自定義指令,這樣highlight.js就變成了Vue的一個新功能。
效果:
但凡遇到第三方插件如何與Vue.js集成的問題,都可以嘗試用自定義指令實現。
練習題:現在要用自定義指令實現一個常見的 tip 提示彈框的功能,鼠標移入元素,可以在元素的上下左右顯示 tip,鼠標移出則隱藏 tip。
讀者可自己嘗試。用起來確實非常方便。vuetifyjs里有相關的實現,請參考:
https://vuetifyjs.com/directives/tooltips
更多的用法請參考: