Vue.js基礎(chǔ)-11-自定義指令(directive):全局指令缕贡、局部指令翁授、鉤子、簡寫函數(shù)

1. 自定義全局指令

語法示例

下邊定義了一個 名為 v-指令名的自定義指令

    Vue.directive('指令名', {操作})

全局指令

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW-宋</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    <p>頁面載入時晾咪,input 元素自動獲取焦點(diǎn):</p>
    <input v-focus>
  </div>

  <script>
    // 注冊一個全局自定義指令 v-focus
    Vue.directive('focus', {
      // 當(dāng)綁定元素插入到 DOM 中收擦。
      inserted: function (el) {
        // 聚焦元素
        el.focus()
      }
    })
    // 創(chuàng)建根實(shí)例
    new Vue({
      el: '#app'
    })
  </script>
</body>

</html>

2. 自定義局部指令

語法示例

    new Vue({
      el: '#app',
      directives: {
        指令名: {操作}
      }
    })

完整示例

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW-宋</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    <p>頁面載入時,input 元素自動獲取焦點(diǎn):</p>
    <input v-focus>
  </div>

  <script>
    // 創(chuàng)建根實(shí)例
    new Vue({
      el: '#app',
      directives: {
        // 注冊一個局部的自定義指令 v-focus
        focus: {
          // 指令的定義
          inserted: function (el) {
            // 聚焦元素
            el.focus()
          }
        }
      }
    })
  </script>
</body>

</html>

3. 鉤子

3.1 鉤子函數(shù)

指令定義函數(shù)提供了幾個鉤子函數(shù)(可選):

  • bind:
    只調(diào)用一次谍倦,指令第一次綁定到元素時調(diào)用塞赂,用這個鉤子函數(shù)可以定義一個在綁定時執(zhí)行一次的初始化動作。

  • inserted:
    被綁定元素插入父節(jié)點(diǎn)時調(diào)用(父節(jié)點(diǎn)存在即可調(diào)用昼蛀,不必存在于 document 中)宴猾。

  • update:
    被綁定元素所在的模板更新時調(diào)用,而不論綁定值是否變化叼旋。通過比較更新前后的綁定值仇哆,可以忽略不必要的模板更新(詳細(xì)的鉤子函數(shù)參數(shù)見下)。

  • componentUpdated:
    被綁定元素所在模板完成一次更新周期時調(diào)用夫植。

  • unbind:
    只調(diào)用一次讹剔, 指令與元素解綁時調(diào)用。

3.2 參數(shù)

  • el :
    指令所綁定的元素,可以用來直接操作 DOM 辟拷。
  • binding: 一個對象撞羽,包含以下屬性:
  • name:
    指令名,不包括 v- 前綴衫冻。
  • value:
    指令的綁定值诀紊, 例如: v-my-directive="1 + 1", value 的值是 2。
  • oldValue:
    指令綁定的前一個值隅俘,僅在 update 和 componentUpdated 鉤子中可用邻奠。無論值是否改變都可用。
  • expression:
    綁定值的表達(dá)式或變量名为居。 例如 v-my-directive="1 + 1" 碌宴, expression 的值是 "1 + 1"。
  • arg:
    傳給指令的參數(shù)蒙畴。例如 v-my-directive:foo贰镣, arg 的值是 "foo"。
  • modifiers:
    一個包含修飾符的對象膳凝。 例如: v-my-directive.foo.bar, 修飾符對象 modifiers 的值是 { foo: true, bar: true }碑隆。
  • vnode:
    Vue 編譯生成的虛擬節(jié)點(diǎn)。
  • oldVnode:
    上一個虛擬節(jié)點(diǎn)蹬音,僅在 update 和 componentUpdated 鉤子中可用上煤。

3.3 示例

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW-宋</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app" v-xishu:hello.a.b="message">
  </div>

  <script>
    Vue.directive('xishu', {
      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 keys: ' + Object.keys(vnode).join(', ')
      }
    })
    new Vue({
      el: '#app',
      data: {
        message: '只是一個信息'
      }
    })
  </script>
</body>

</html>
  • 結(jié)果輸出
name: "xishu"
value: "只是一個信息"
expression: "message"
argument: "hello"
modifiers: {"a":true,"b":true}
vnode keys: tag, data, children, text, elm, ns, context, functionalContext, key, componentOptions, componentInstance, parent, raw, isStatic, isRootInsert, isComment, isCloned, isOnce

4. 簡寫函數(shù)

語法示例

Vue.directive('xiShu', function (el, binding) {
      //簡寫函數(shù)
      el.innerHTML = binding.value.text
    })

完整示例

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW-宋</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    <div v-xiShu="{ color: 'yellow', text: '重要通知!',backgroundColor: 'red' }"></div>
  </div>

  <script>
    Vue.directive('xiShu', function (el, binding) {
      el.innerHTML = binding.value.text
      el.style.backgroundColor = binding.value.backgroundColor
      el.style.color = binding.value.color
    })
    new Vue({
      el: '#app'
    })
  </script>
</body>

</html>

說明;

  • directive 定義了一個自定義指令 v-xiShu著淆,需要 el和binding兩個參數(shù)劫狠。
  • 在 < div > 中定義binding.value 的一些屬性:color,text,backgroundColor
  • 結(jié)果顯示
image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市永部,隨后出現(xiàn)的幾起案子独泞,更是在濱河造成了極大的恐慌,老刑警劉巖苔埋,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阐肤,死亡現(xiàn)場離奇詭異,居然都是意外死亡讲坎,警方通過查閱死者的電腦和手機(jī)孕惜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晨炕,“玉大人衫画,你說我怎么就攤上這事∥屠酰” “怎么了削罩?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵瞄勾,是天一觀的道長。 經(jīng)常有香客問我弥激,道長进陡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任微服,我火速辦了婚禮趾疚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘以蕴。我一直安慰自己糙麦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布丛肮。 她就那樣靜靜地躺著赡磅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宝与。 梳的紋絲不亂的頭發(fā)上焚廊,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音习劫,去河邊找鬼节值。 笑死,一個胖子當(dāng)著我的面吹牛榜聂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嗓蘑,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼须肆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桩皿?” 一聲冷哼從身側(cè)響起豌汇,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泄隔,沒想到半個月后拒贱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛嬉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年逻澳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暖呕。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斜做,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湾揽,到底是詐尸還是另有隱情瓤逼,我是刑警寧澤笼吟,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站霸旗,受9級特大地震影響贷帮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诱告,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一撵枢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔬啡,春花似錦诲侮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至空猜,卻和暖如春绽慈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辈毯。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工坝疼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谆沃。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓钝凶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唁影。 傳聞我的和親對象是個殘疾皇子耕陷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容