IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue 自定义指令练习 -> 正文阅读

[JavaScript知识库]vue 自定义指令练习

1. v-copy

一些 自定义指令里面钩子函数需要互相交流的值 挂载在 el 上

const copy = {
  bind (el, binding) {
    // 一些 自定义指令里面钩子函数需要互相交流的值 挂载在 el 上
    el.$value = binding.value
    el.handle = () => {
      // 创建textarea标签
      const textarea = document.createElement('textarea')
      // 设置相关属性
      textarea.readOnly = 'readonly'
      textarea.style.position = 'fixed'
      textarea.style.top = '-99999px'
      // 把目标内容赋值给它的value属性
      textarea.value = el.$value
      // 插入到页面
      document.body.appendChild(textarea)
      // 调用onselect()方法
      textarea.select()
      // 把目标内容复制进剪贴板, 该API会返回一个Boolean
      const res = document.execCommand('Copy')
      res && console.log('复制成功,剪贴板内容:' + el.$value)
      // 移除textarea标签
      document.body.removeChild(textarea)
    }
    // 绑定click事件
    el.addEventListener('click', el.handle)
  },
  // 当传进来的值更新时
  componentUpdated (el, binding) {
    // 更新el的value值,click的时候获取最新的值
    el.$value = binding.value
  },
  unbind(el) {  
    el.removeEventListener('click', el.handle)
  }
}

export default copy

?生命周期钩子:

// 在组件的 VNode 更新时调用
update(el,binding,vnode,oldVnode){
},
// 指令所在组件的 VNode 及其子 VNode 全部更新后调用
componentUpdated(el,binding,vnode,oldVnode){
},

2. v-input

对 input 输入框输入的值进行校验

(1)只允许输入数字

<input v-input:number />
<input v-input:maxSize="16" />

此时 binding 的值

冒号 后面的 值 是 arg

const input = {
  // binding 直接赋值结构
  bind (el, { arg, value }) {
    el.$handle = (el) => {
      // 判断类型
      if (arg === 'number') {
        el.value = el.value.replace(/[^\d]/, '')
      } else if (arg === 'maxSize') {
        el.value = el.value.slice(0, value)
      }
    }
    // 监听变化
    el.addEventListener('input', () => {
      el.$handle(el)
    })
  }
}

export default input

3. vue-clampy?

<p v-clampy="3">Long text to clamp here</p>
<!-- Long text to...-->

代码:

const Clampy = {
  bind (el, { value }) {
    const arr = el.innerHTML.split(' ')
    if (arr.length > value) {
      el.innerHTML = arr.slice(0, value).join(' ') + '...'
    }
  }
}

export default Clampy

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:21:37  更:2021-12-04 13:21:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:51:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码