VUE2第五天學習---自定義指令

閱讀目錄

  • 1.理解VUE中的自定義指令
回到頂部

1.理解VUE中的自定義指令

默認核心指令有 (v-model 和 v-show), 但是有時候我們需要用到自定義指令,在vue中,代碼復用主要形式和抽象是組件,但是在有的情況下,我們仍然需要對DOM元素進行底層操作,所以這個時候我們需要用到自定義指令。

比如下面的一個input框,當頁面加載時,元素將獲得焦點,我們還沒有點擊input框,input就獲得焦點了,如下demo代碼:

<!DOCTYPE html>
<html><head><title>演示Vue</title><style></style></head><body><div id='demo'><input v-focus></div></body><script src="./vue.js"></script><script type="text/javascript">// 注冊一個全局定義指令 v-focus
    Vue.directive('focus', {// 綁定元素插入到DOM 中
      inserted: function (el) {// 聚焦元素
        el.focus()}})new Vue({el: '#demo'})</script>
</html>

查看效果

上面的是全局定義指令 v-foucs, 當然我們也可以局部定義,如下代碼:

<!DOCTYPE html>
<html><head><title>演示Vue</title><style></style></head><body><div id='demo'><input v-focus></div></body><script src="./vue.js"></script><script type="text/javascript">new Vue({el: '#demo',directives: {focus: {// 指令的定義
          inserted: function (el) {// 聚焦元素
            el.focus()}}}})</script>
</html>

查看效果

然后我們就可以在任何input元素框或者textarea使用 v-focus 了,如下代碼:

<input v-focus />

2. 指令定義函數提供了如下幾個鉤子函數(根據VUE教程來):
bind: 只調用一次,指令第一次綁定到元素時調用,也就是說初始化時候調用一次。
inserted: 被綁定元素插入父節點時調用(父節點需要存在才會調用)。
update: 被綁定元素所在的模板更新時調用(通過比較更新前后的綁定值)。
componentUpdated: 被綁定元素所在模板完成一次更新周期時調用。
unbind: 指令與元素解綁時調用,只調用一次,和bind對應。

上面幾個鉤子函數有如下參數 (el, binding, vnode, oldVnode)
el: 指令所綁定的元素,可用來直接操作DOM。
binding: {Object} obj有如下屬性:
name: 指令名,不包括 v- 前綴
value: 指令綁定值。比如 v-my-directive = '1+1', 那么value就是2.
oldValue: 指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
expression: 綁定值的字符串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
arg: 傳給指令的參數。例如 v-my-directive:foo, arg 的值是 "foo"。
modifiers: 一個包含修飾符的對象。 例如: v-my-directive.foo.bar, 修飾符對象 modifiers 的值是 { foo: true, bar: true }。

vnode: Vue編譯生成的虛擬節點。
oldVnode: 上一個虛擬節點,僅在 update 和 componentUpdated 鉤子中可用。

注意: 除了 el 之外,其它參數都應該是只讀的,盡量不要修改他們。如果需要在鉤子之間共享數據,建議通過元素的 dataset 來進行。

如下demo代碼:

<!DOCTYPE html>
<html><head><title>演示Vue</title><style></style></head><body><div id='demo' v-demo:hello.a.b='message'></div></body><script src="./vue.js"></script><script type="text/javascript">Vue.directive('demo', {bind: function(el, binding, vnode) {var s = JSON.stringify;el.innerHTML = 'name: '       + s(binding.name) + '<br/>' + 'value: '      + s(binding.value) + '<br/>' + 'expression: ' + s(binding.expression) + '<br/>' + 'argument: '   + s(binding.arg) + '<br/>' + 'modifiers: '  + s(binding.modifiers) + '<br/>' + 'vnode: '      + Object.keys(vnode).join(', ')}})new Vue({el: '#demo',data: {message: 'hello!'}})</script>
</html>

查看效果

對象字面量
如果指令需要多個值,可以傳入一個 JavaScript 對象字面量。
如下代碼:

<!DOCTYPE html>
<html><head><title>演示Vue</title><style></style></head><body><div id='demo' v-demo="{ color: 'white', text: 'hello!' }"></div></body><script src="./vue.js"></script><script type="text/javascript">Vue.directive('demo', function (el, binding) {console.log(binding.value.color) // => "white"
      console.log(binding.value.text)  // => "hello!"
    })new Vue({el: '#demo'})</script>
</html>

查看效果

在控制臺可以看到輸出了字符串了。

2. Vue.js自定義指令的用途。
上面是教程中的一些demo,但是在實際當中我們需要用到什么地方呢?我們可以預想到可以使用到預加載數據的地方,比如預加載圖片,由于圖片加載需要一些時間,因此我們先加載一張占位符圖片,
等圖片真正加載完成時候,才加載真正的圖片,這樣的用戶體驗效果更能更好點。下面是使用vue自定義指令來實現這個功能,代碼如下:

?

<!DOCTYPE html>
<html><head><title>演示Vue</title><style>img { width: 180px; height: 180px; overflow: hidden;}</style></head><body><div id='demo'><img v-for='item in list' v-img='item.url'/></div></body><script src="./vue.js"></script><script type="text/javascript">Vue.directive('img', {inserted: function(el, binding) {console.log(el)// 下面使用一張背景顏色來演示一下,var color = Math.floor(Math.random()*1000000);el.style.backgroundColor = '#' + color; // 隨機的背景顏色var img = new Image();img.src = binding.value; img.onload = function() {el.style.backgroundImage = 'url(' + binding.value + ')';}}});new Vue({el: '#demo',data: {list: [{url: 'http://img.alicdn.com/imgextra/i3/730692984/TB2.dQMdxXkpuFjy0FiXXbUfFXa_!!730692984-0-beehive-scenes.jpg_180x180q70'},{url: 'http://img.alicdn.com/imgextra/i2/730692984/TB239AJdw0kpuFjSspdXXX4YXXa_!!730692984-0-beehive-scenes.jpg_180x180q70'},{url: 'http://img.alicdn.com/imgextra/i4/730692984/TB29TsZdrVkpuFjSspcXXbSMVXa_!!730692984-0-beehive-scenes.jpg_180x180q70'}]}})</script>
</html>

查看效果

如上演示可以看到,剛開始載入頁面的時候,有那么一瞬間先是背景顏色 最后是圖片,這里只是簡單的演示一下,在實際使用中,我們可以先放一張預加載的圖片,當真正圖片加載完成的時候,才顯示真正的圖片,省的在圖片未加載完成的時候,背景圖片是空白的效果就不是很好了。

轉載于:https://www.cnblogs.com/tugenhua0707/p/6828631.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455722.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python報名_2019年少兒Python創意編程比賽報名時間

2019年Python創意編程比賽時間及相關規定&#xff1a;參賽對象 Python創意編程比賽設初中組和高中組。 全國各地初中、高中(含中等職業學校)在校學生均以個人名義報名參加。 參賽步驟 Python創意編程比賽分初評、復評和終評三個階段&#xff0c;初評和復評以線上形式開展&#…

【分享】后廠村鮮為人知的另一面

好&#xff01;回歸學長每周的雜談分享&#xff01; 有人說“后廠村”像一座孤島&#xff0c; 這里遠離喧囂&#xff0c;沒有生活氣息。 而剛剛到廠的學長&#xff0c; 卻想和你分享他鮮為人知的另一面。 內容整理源于網絡看客原創侵刪 說起后廠村&#xff0c;也許是老北京人…

windows 下安裝rabbitmq

2019獨角獸企業重金招聘Python工程師標準>>> 1、下載 下載地址&#xff1a;http://www.rabbitmq.com/download.html 2、Windows上安裝 2.1 安裝安裝Erlang 下載erlang&#xff1a;http://www.erlang.org/download/otp_win64_17.3.exe 安裝&#xff1a; erlang安裝完…

【Kubernetes】k8s 的基本使用指令

今天分享如題&#xff1a; Kubernetes 最近更新緩慢由于工作太忙惹&#xff0c;忙里偷閑整理愿能與君共勉&#x1f4aa; K8S對我來說是個新的技術棧&#xff0c;程序員就是需要一直充電&#x1f50b; 加油&#xff0c;一起進步&#x1f4aa; 結構模型 k8s 是經典的一對多模…

php是如何工作的

a:前提條件: apache服務器啟動正常工作 b:客戶端瀏覽器在地址欄輸入一個程序地欄 按回車發送請求 {請求}http://127.0.0.1/day03/1.php c:apache接收請求&#xff0c;并且負責查找相應資源1.php d:如果apache沒有找到相應的資源,返回錯誤消息給客戶端瀏覽器404 NOT FOUND e:如果…

c語言 malloc_C語言快速入門——動態內存分配

在前面一系列的字符串操作中&#xff0c;我們都是先定義一個固定大小的字符數組&#xff0c;然后根據所需&#xff0c;或拷貝、或連接、或格式化來為這個數組提供內容。固定大小的數組意味著在程序運行期間&#xff0c;數組所占用的內存是確定的(即劃分了固定數量的內存)&#…

FFMPEG設置 cbr討論

Q:我采用ffmpeg調用x264一直出錯&#xff0c;命令如下ffmpeg -s 352x288 -r 50 -pix_fmt yuv420p -i tmp.yuv tmp.h264可不可以給點建議&#xff0c;找了很久也沒有找到解決辦法&#xff0c;錯誤時error while opening encoder for output stream 0.0 maybe incorrect parame…

博文聲明

本博客用于分享學習筆記 歡迎大神指正&#xff0c;我們互相學習交流&#xff0c;共同成長進步&#xff01; 博客首頁:秋葉夏風的博客

【經驗分享】工程開發與Coding規范

今天分享分為兩部分 :) PART01 工程開發代碼規范分享/ PART02 關于某易云自動簽到聽歌分享- 5Mins DevCoding Rule: PART 1 了解真實工程開發&#x1f3d7;..... 本篇內容分享的宗旨: 學長工作經驗之談僅作分享&#x1f3f7; Ready,Go 代碼管理——工具篇 ?工程上首先需要…

過濾器與攔截器區別

過濾器與攔截器區別 參考&#xff1a;http://www.cnblogs.com/dreamroute/p/4198087.html?utm_sourcetuicool 過濾器 過濾器是一個程序&#xff0c;它先于與之相關的servlet或JSP頁面運行在服務器上。它是隨你的web應用啟動而啟動的&#xff0c;只初始化一次&#xff0c;以后就…

二進制-高效位運算

數獨 數獨是介紹位運算的好例子&#xff0c;運用位運算和不運用效率差別還是挺大的。我們先看數獨需求: 1、當前數字所在行數字均含1-9&#xff0c;不重復 2、當前數字所在列數字均含1-9&#xff0c;不重復 3、當前數字所在宮&#xff08;即3x3的大格&#xff09;數字均含1-9&a…

pytorch resnet50_PyTorch終于能用上谷歌云TPU,推理性能提升4倍,我們該如何薅羊毛?...

曉查 發自 凹非寺量子位 報道 | 公眾號 QbitAIFacebook在PyTorch開發者大會上正式推出了PyTorch 1.3&#xff0c;并宣布了對谷歌云TPU的全面支持&#xff0c;而且還可以在Colab中調用云TPU。之前機器學習開發者雖然也能在Colab中使用PyTorch&#xff0c;但是支持云TPU還是第一次…

x264里的2pass指的是什么意思? x264源代碼分析2.encode()

A:x264里的2pass指的是什么意思?另外stat是什么意思, 比如有個參數--stats <string> Filename for 2 pass stats [/"%s/"]/n", defaults->rc.psz_stat_out );stats在這是什么意思? 2pass是2次編碼的意思&#xff0c;stats是統計文檔的名稱&a…

項目啟動居然如此重要!

項目的啟動階段比較短&#xff0c;項目經理往往容易忽視這個階段&#xff0c;但是&#xff0c;項目的啟動卻具有著重要的意義。 定基調&#xff1a; 基調包括工作的節奏、團隊氛圍和溝通風格等。 一首歌的第一句決定了這首歌的基調&#xff0c;如何唱好這第一句就是項目啟動所要…

mysql數據庫導入導出文件sql文件

window下 1.導出整個數據庫 mysqldump -u 用戶名 -p 數據庫名 > 導出的文件名 mysqldump -u dbuser -p dbname > dbname.sql 2.導出一個表 mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名 mysqldump -u dbuser -p dbname users> dbname_users.sql 3.導出…

Android Studio主題設置、顏色背景配置

2019獨角獸企業重金招聘Python工程師標準>>> color-themes 效果展示 打開http://color-themes.com/有很多樣式可供選擇 1. Monokai Sublime Text 3(color theme) 2. Solarized Light (color theme) 3. Visual Studio 2015 Dark(color theme) 導入方式 下載主…

JavaScript中的函數

js函數 *第一種是使用function語句定義函數 function abc(){alert(abc); }*第二種是在表達式中定義函數 var 函數名 function\(參數1&#xff0c;參數2&#xff0c;…\){函數體};//例如&#xff1a;//定義var add function\(a,b\){return ab;}//調用函數document.write\(a…

x264源代碼分析1。fread()

相關說明:1. 使用版本: x264-cvs-2004-05-11 2. 這次的分析基本上已經將代碼中最難理解的部分做了闡釋,對代碼的主線也做了剖析,如果這個主線理解了,就容易設置幾個區間,進行分工閱讀,將各個區間擊破了. 3. 需要學習的知識:a) 編碼器的工作流程.b) H.264的碼流結構,像x264_sp…

在centos下安裝pycrypto報錯 RuntimeError: autoconf error

解決&#xff1a;yum -y install gcc File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command cmd_obj.run() File "/usr/lib64/python3.6/distutils/command/build.py", line 135, in run self.run_command(cm…

Java多線程實現異步調用

在Java平臺,實現異步調用的角色有如下三個角色&#xff1a;調用者、 提貨單 、真實數據&#xff0c;一個調用者在調用耗時操作,不能立即返回數據時,先返回一個提貨單 .然后在過一斷時間后憑提貨單來獲取真正的數據.去蛋糕店買蛋糕&#xff0c;不需要等蛋糕做出來(假設現做要很長…