最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue 自定義指令實(shí)現(xiàn)一鍵 Copy功能

 更新時間:2019年09月16日 11:35:17   作者:Essentric  
指令 (Directives) 是帶有 v- 前綴的特殊特性。這篇文章主要介紹了Vue 自定義指令實(shí)現(xiàn)一鍵 Copy的功能,需要的朋友可以參考下

先看下效果圖:

指令是啥?

按照慣例,先請出官方的解釋:

指令 (Directives) 是帶有 v- 前綴的特殊特性。指令特性的值預(yù)期是單個 JavaScript 表達(dá)式 (v-for 是例外情況,稍后我們再討論)。指令的職責(zé)是,當(dāng)表達(dá)式的值改變時,將其產(chǎn)生的連帶影響,響應(yīng)式地作用于 DOM。

再按照慣例,大家 ( 假裝 ) 看不懂,然后我來舉個栗子解釋一番。。。好,還是不知所云,本文結(jié)束 ( Ctrl + F4 ) ,下一篇。

為了避免上述情況出現(xiàn),就不解釋了。實(shí)際上官方提供了很多內(nèi)置指令,如: v-if 、 v-for 、 v-bind and so on。每一個指令都有自己特定的功能。

自定義指令

顧名思義就是自己定義的指令啦,可以實(shí)現(xiàn)我們想要的功能。下面就實(shí)現(xiàn)一個 一鍵 Copy 的功能吧。

生命周期

首先簡單瞟一下指令的語法,每個指令都有自己的生命周期,看到生命周期,肯定會想到鉤子函數(shù),沒錯,指令也提供了鉤子函數(shù):

  • bind:指令第一次綁定到元素時調(diào)用,此鉤子只會調(diào)用一次。在這里可以進(jìn)行一次性的初始化設(shè)置。
  • inserted:被綁定元素插入父節(jié)點(diǎn)時調(diào)用 (僅保證父節(jié)點(diǎn)存在,但不一定已被插入文檔中)。
  • update:所在組件的 VNode 更新時調(diào)用,但是可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。
  • componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用。
  • unbind:只調(diào)用一次,指令與元素解綁時調(diào)用。

下面再簡單瞟一眼上述鉤子函數(shù)的參數(shù)哈:

  • el :指令所綁定的元素,可以用來直接操作 DOM 。
  • binding :一個對象,包含以下屬性:
  • name :指令名,不包括 v- 前綴。
  • value :指令的綁定值,例如: v-my-directive="1 + 1" 中,綁定值為 2 。
  • oldValue :指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
  • expression :字符串形式的指令表達(dá)式。例如 v-my-directive="1 + 1" 中,表達(dá)式為 " 1 + 1 "。
  • arg :傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 " foo "。
  • modifiers :一個包含修飾符的對象。例如: v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true } 。
  • vnode : Vue 編譯生成的虛擬節(jié)點(diǎn)。移步 VNode API 來了解更多詳情。
  • oldVnode :上一個虛擬節(jié)點(diǎn),僅在 update 和 componentUpdated 鉤子中可用。

看起來還挺多的,不過別方,其實(shí)常用的就幾個。好了下面要開始表演了:

首先建一個 js 文件(v-copy.js)。定義一個對象。( 指令實(shí)際就是一個對象 )

import { Message } from 'ant-design-vue';

const vCopy = { // 名字愛取啥取啥
 /*
  bind 鉤子函數(shù),第一次綁定時調(diào)用,可以在這里做初始化設(shè)置
  el: 作用的 dom 對象
  value: 傳給指令的值,也就是我們要 copy 的值
 */
 bind(el, { value }) {
  el.$value = value; // 用一個全局屬性來存?zhèn)鬟M(jìn)來的值,因為這個值在別的鉤子函數(shù)里還會用到
  el.handler = () => {
   if (!el.$value) {
   // 值為空的時候,給出提示,我這里的提示是用的 ant-design-vue 的提示,你們隨意
    Message.warning('無復(fù)制內(nèi)容');
    return;
   }
   // 動態(tài)創(chuàng)建 textarea 標(biāo)簽
   const textarea = document.createElement('textarea');
   // 將該 textarea 設(shè)為 readonly 防止 iOS 下自動喚起鍵盤,同時將 textarea 移出可視區(qū)域
   textarea.readOnly = 'readonly';
   textarea.style.position = 'absolute';
   textarea.style.left = '-9999px';
   // 將要 copy 的值賦給 textarea 標(biāo)簽的 value 屬性
   textarea.value = el.$value;
   // 將 textarea 插入到 body 中
   document.body.appendChild(textarea);
   // 選中值并復(fù)制
   textarea.select();
   textarea.setSelectionRange(0, textarea.value.length);
   const result = document.execCommand('Copy');
   if (result) {
    Message.success('復(fù)制成功');
   }
   document.body.removeChild(textarea);
  };
  // 綁定點(diǎn)擊事件,就是所謂的一鍵 copy 啦
  el.addEventListener('click', el.handler);
 },
 // 當(dāng)傳進(jìn)來的值更新的時候觸發(fā)
 componentUpdated(el, { value }) {
  el.$value = value;
 },
 // 指令與元素解綁的時候,移除事件綁定
 unbind(el) {
  el.removeEventListener('click', el.handler);
 },
};
export default vCopy;

到這里,一鍵 Copy 的功能就實(shí)現(xiàn)了,最后再說一嘴怎么將自定義指令注冊到全局:再新建一個 js ( directives.js )文件來注冊所有的全局指令。

import copy from './v-copy';
// 自定義指令
const directives = {
 copy,
};
// 這種寫法可以批量注冊指令
export default {
 install(Vue) {
  Object.keys(directives).forEach((key) => {
   Vue.directive(key, directives[key]);
  });
 },
};

最后,在 main.js 中這樣引入:

import Vue from 'vue';
import Directives from './directives';

Vue.use(Directives);

最后的最后,說一下怎么用吧。。

<template>
 <button v-copy="copyText">copy</button>
</template>

<script>
export default {
 data() {
  return {
   copyText: '要 Copy 的內(nèi)容',
  };
 },
};
</script>

總結(jié)

以上所述是小編給大家介紹的Vue 自定義指令實(shí)現(xiàn)一鍵 Copy功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • vue3+vite+vant4手機(jī)端項目實(shí)戰(zhàn)記錄

    vue3+vite+vant4手機(jī)端項目實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于vue3+vite+vant4手機(jī)端項目實(shí)戰(zhàn)的相關(guān)資料,Vue3是一種前端開發(fā)框架,它的目標(biāo)是提供更好的性能和開發(fā)體驗,需要的朋友可以參考下
    2023-08-08
  • vue.js實(shí)現(xiàn)選項卡切換

    vue.js實(shí)現(xiàn)選項卡切換

    這篇文章主要為大家詳細(xì)介紹了vue.js實(shí)現(xiàn)選項卡切換功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue+Element-ui實(shí)現(xiàn)分頁效果

    vue+Element-ui實(shí)現(xiàn)分頁效果

    這篇文章主要為大家詳細(xì)介紹了vue+Element-ui實(shí)現(xiàn)分頁效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • vue 設(shè)置 input 為不可以編輯的實(shí)現(xiàn)方法

    vue 設(shè)置 input 為不可以編輯的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇vue 設(shè)置 input 為不可以編輯的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • Vue?項目的成功發(fā)布和部署的實(shí)現(xiàn)

    Vue?項目的成功發(fā)布和部署的實(shí)現(xiàn)

    本文主要介紹了Vue?項目的成功發(fā)布和部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 詳解vue 組件

    詳解vue 組件

    這篇文章主要介紹了詳解vue 組件的相關(guān)知識,文中講解非常細(xì)致,代碼供大家參考學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Vue3實(shí)現(xiàn)密碼加密登錄的示例代碼

    Vue3實(shí)現(xiàn)密碼加密登錄的示例代碼

    現(xiàn)在,很多登陸表單都會使用密碼加密,為登錄安全,登錄表單輸入密碼,會加密后傳入后臺,本文就來介紹一下Vue3實(shí)現(xiàn)密碼加密登錄的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 詳解Vue中keep-alive的使用

    詳解Vue中keep-alive的使用

    keep-alive是Vue的內(nèi)置組件,當(dāng)它包裹動態(tài)組件時,會緩存不活動的組件實(shí)例,而不是銷毀,這篇文章主要介紹了詳解Vue中keep-alive的使用,需要的朋友可以參考下
    2023-03-03
  • vue中使用window.open()參數(shù)示例詳解

    vue中使用window.open()參數(shù)示例詳解

    這篇文章主要介紹了vue中使用window.open()參數(shù)詳解,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue-cli3訪問public文件夾靜態(tài)資源報錯的解決方式

    vue-cli3訪問public文件夾靜態(tài)資源報錯的解決方式

    這篇文章主要介紹了vue-cli3訪問public文件夾靜態(tài)資源報錯的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

永登县| 连山| 平乡县| 温宿县| 永新县| 屯门区| 延吉市| 鄂伦春自治旗| 安溪县| 温宿县| 晋州市| 松原市| 宁海县| 上思县| 阆中市| 丹棱县| 九寨沟县| 甘泉县| 巴马| 山阴县| 图片| 莎车县| 仁布县| 织金县| 凭祥市| 奉节县| 南澳县| 苏州市| 龙岩市| 武冈市| 清丰县| 建昌县| 尉犁县| 博爱县| 浮山县| 瑞丽市| 兴化市| 辽宁省| 礼泉县| 磐安县| 临沧市|