Vue具體輕量級框架、簡單易學、雙向數據綁定、組件化、數據和結構的分離、虛擬DOM、運行速度快等優勢,Vue中頁面使用的是局部刷新,不用每次跳轉頁面都要請求所有數據和dom,可以大大提升訪問速度和用戶體驗。
1.什么是自定義指令
以 v- 為前綴,然后加上自己定義好的名字組成的一個指令就是自定義指令。為什么要有自定義指令呢?在有些時候,你仍然需要對普通的DOM元素進行底層的操作,這個時候就可以用到自定義指令。
2.自定義指令的語法
全局自定義指令
//注冊一個全局自定義指令`v-focus`Vue.directive('focus',{//當被綁定的元素插入到DOM中時……inserted:function(el){//聚焦元素el.focus()}})
局部自定義指令
directives:{focus:{//指令的定義inserted:function(el){el.focus()}}}
3.鉤子函數
看了上述的代碼,如果你從來沒接觸過這類內容,你可能會很生疏,下面我給大家講講其每一步所需要掌握的東西
首先是鉤子函數:
bind
:只會調用一次的函數,表示指令第一次綁定元素時調用
inserted
:被綁定元素插入到父節點時調用(僅保證父節點存在,但不一定已被插入文檔中)。
update
:所在組件的 VNode 更新時調用,但是可能發生在其子 VNode 更新之前。指令的值可能發生了改變,也可能沒有。
componentUpdated
:指令所在組件的 VNode 及其子 VNode 全部更新后調用。
unbind
:只調用一次,指令與元素解綁時調用。
然后我們看看鉤子函數中的參數列表:
el
:指令所綁定的元素,可以用來直接操作 DOM 。
binding
:一個對象,包含以下屬性:
name
:指令名,不包括 v-
前綴。
value
:指令的綁定值,例如:
v-my-directive="1 + 1"
中,綁定值為 2
。
oldValue
:指令綁定的前一個值,僅在 update
和 componentUpdated
鉤子中可用。無論值是否改變都可用。expression
:字符串形式的指令表達式。例
如 v-my-directive="1 + 1"
中,表達式為 "1 + 1"
。arg
:傳給指令的參數,可選。
例如 v-my-directive:foo
中,參數為 "foo"
。
modifiers
:一個包含修飾符的對象。例如:v-my-directive.foo.bar
中,修飾符對象為 { foo: true, bar: true }
。vnode
:Vue 編譯生成的虛擬節點。
oldVnode
:上一個虛擬節點,僅在 update
和 componentUpdated
鉤子中可用。
除了 el
之外,其它參數都應該是只讀的,切勿進行修改。如果需要在鉤子之間共享數據,建議通過元素的 dataset
來進行。
下面我們來分析幾個簡單的鉤子函數,及其參數
代碼如下:(看完代碼我再將其)
<pid="app"><spanv-mmm='{color:color,fontSize:"20px"}'>bind的對象形式</span><br><button@click='changeStyle'>改變顏色</button></p><script>constvm=newVue({el:'#app',data:{color:'cyan',style1:{color:'lightblue'},style2:{fontSize:"20px"}},directives:{mmm:{bind(el,binding){//binding.value={color:color,fontSize:"20px"}if(binding.value.constructor===Object){Object.keys(binding.value).forEach(key=>{el.style[key]=binding.value[key];})}}}},methods:{changeStyle(){this.color='lightpink'}},})</script>
效果圖:
下面我們換成 update
鉤子函數:
update(el,binding){//binding.value={color:color,fontSize:"20px"}if(binding.value.constructor===Object){Object.keys(binding.value).forEach(key=>{el.style[key]=binding.value[key];})}}
效果圖:
當我們點擊按鈕后:
我們發現他會隨著數據改變而更新,但是他剛開始不會調用它,只有當數據發生改變之后才會調用該鉤子函數
如果我們想要要剛開始就調用,并且會跟隨數據改變而改變,那么我們就要同時調用 bind
和 update
這兩個鉤子函數,但是兩個鉤子函數中的內容又是一樣的,那么書寫起來就很麻煩。那么我們可以這樣寫:
mmm:function(el,binding){if(binding.value.constructor===Object){Object.keys(binding.value).forEach(key=>{el.style[key]=binding.value[key];})}},
這樣之后我們就可以達到那樣的效果了。
書寫一個類似于 v-bind:style
的效果的自定義指令
<pid="app"><spanv-mystyle='{color:color,fontSize:"20px"}'>v-mystyle的對象形式</span><pv-mystyle='[style1,style2]'>我使用的是v-mystyle的數組形式</p><button@click='changeStyle'>改變顏色</button></p><script>constvm=newVue({el:'#app',data:{color:'cyan',style1:{color:'lightblue'},style2:{fontSize:"20px"}},directives:{mystyle:function(el,binding){if(binding.value.constructor===Object){Object.keys(binding.value).forEach(key=>{el.style[key]=binding.value[key];})}elseif(binding.value.constructor===Array){for(itemofbinding.value){for(keyinitem){el.style[key]=item[key];}}}},},methods:{changeStyle(){this.color='lightpink'}},})</script>
效果圖:
補充:下面看下v-bind綁定style的幾種方式
<!DOCTYPEhtml><HTML><HEAD><TITLE>VUE---V-BIND綁定STYLE的幾種方式</TITLE></HEAD><BODY><DIVID="APP1"><DIV:STYLE="{'COLOR':COLOR,'FONTSIZE':SIZE+'PX'}">第一個示例</DIV></DIV><DIVID="APP2"><DIV:STYLE="STYLES">第二種方式</DIV></DIV><SCRIPTTYPE="TEXT/JAVASCRIPT"SRC="HTTPS://UNPKG.COM/VUE/DIST/VUE.MIN.JS"></script><SCRIPTTYPE="TEXT/JAVASCRIPT">VARAPP1=NEWVUE({EL:'#APP1',DATA:{COLOR:'RED',SIZE:15}})VARAPP2=NEWVUE({EL:'#APP2',DATA:{STYLES:{COLOR:'RED',FONTSIZE:15+'PX'}}})</script></BODY></HTML>
感謝各位的閱讀!關于“vue中v-bind:style效果的自定義指令是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
企業銀行客戶號是什么?企業銀行客戶號是銀行給企業分配的一個編碼 ,助理企業網銀時對應企業的唯一號碼 ,類似于個人身份證號,一般是一串數字。如果不記得企業銀行客戶號,可以通過致電開戶銀行進行人工咨詢或持企業印鑒到開戶行人工柜臺進行查詢。銀行客戶號是開通網銀時產生的,網銀是互聯網中設立的在線虛擬柜臺,分為個人網銀和企業網銀,企業網銀就是專門針對企業業務辦理而設立的,客戶可以在企業網銀.上進行轉賬、投資...
為了逮捕他,國務院懸賞500萬美元。英國、美國和哥倫比亞的相關機構都參與了對他的搜尋,動用了500多名哥倫比亞特種部隊成員和22架直升機。哥倫比亞總統杜克表示,他的被捕是該國軍事史上最大規模的叢林滲透行動。他就是達伊羅·安東尼奧·烏蘇加,哥最大販毒組織海灣家族的頭目,別名“Otoniel”。他是哥倫比亞政府近十年來的頭號通緝犯,被杜克形容為“世界上最可怕的毒販”。去年10月,這場醞釀多年的抓捕行動...
(相關資料圖)提起x360手柄怎么在電腦上用大家在熟悉不過了,被越來越多的人所熟知,那你知道x360手柄怎么在電腦上用嗎?快和小編一起去了解一下吧!將手柄無線接收器,插入電腦,電腦會自動安裝好驅動,然后手柄的綠燈將會亮起;接著打開手柄電源,然后按下接收器器上的一個小按鈕。接著再按手柄上側面上的一個小按鈕,你就會看到西瓜鍵此時在轉圈,等兩三秒然后手柄上的綠燈常亮了就表示匹對成功了,然后就代表手柄可以...