广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Vue自定义指令如何实现checkbox全选功能
  • 348
分享到

Vue自定义指令如何实现checkbox全选功能

2024-04-02 19:04:59 348人浏览 薄情痞子
摘要

这篇文章主要介绍Vue自定义指令如何实现checkbox全选功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码:<!DOCTYPE html> <ht

这篇文章主要介绍Vue自定义指令如何实现checkbox全选功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

代码:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title></title>
 </head>
 <body>
  <div id="app">
  <input type="checkbox" v-model="allCheck" v-check-all="allCheck" check-data="list" result="customerResult" key="demo"> 全选
  <ul> 
   <li v-for="item in list"> 
    <input type="checkbox" v-model="item.checked"> 
    {{item.demo}}
   </li> 
  </ul> 
  <div >
   customerResult: {{customerResult}}
  </div>
  </div>
  <script src="vue.js"></script>
  <script>
   var vm = new Vue({
    el: "#app",
    data:function(){
     return {
      list:[{demo:1},
      {demo:2},
      {demo:3}],
      allCheck:'',
      customerResult:'',
     }
    },
    directives: {
     'check-all': {
      twoWay: true,
      params: ['checkData','result','key'],
      bind() {
       
       this.vm[this.params.checkData].forEach((item)=>{
        Vue.set(item,'checked',false)
       });
       
       this.setValue=function(){
        let result=[]
        this.vm[this.params.checkData].forEach((item) => {
         if(item.checked){
          result.push(item[this.params.key])
         }
        });
        this.vm[this.params.result]=result
       }
        
       this.vm.$watch(this.params.checkData, (data) => {
        if(data.every((item) => item.checked)) {
         this.set(true);
        } else {
         this.set(false);
        }
        this.setValue()
       }, {deep: true});
      },
      // checkAll发生更改时 
      update(checkAll) {
        
       if(checkAll) {
        this.vm[this.params.checkData].forEach((item) => {
         item.checked = true;
        });
       } else {
        this.vm[this.params.checkData].forEach((item) => {
         item.checked = false;
        });
       }
       this.setValue()
      },
     },
    }
   })
  </script>
 </body>
</html>

通常我们都要获取原始数据中的某个键值,可在“key”中填进想要获取的键值,“result”就是被选中的项了。
有时,我们需要返回一个完整的对象修改一下代码,当不输入key时,返回一个完整的对象数组

this.setValue=()=>{
 let result=[]
 this.vm[this.params.checkData].forEach((item) => {
  //删除checked属性
  let temp={};
  (()=>delete Object.assign(temp,item).checked)();
  item.checked?result.push(item[this.params.key]||temp):"";
 });
 this.vm[this.params.result]=result
}

但时,这时,返回来的数组中对象中并没有与与原数据是相同的引用地址,当需要使用array.$remove()函数时就会失败,新增一个relative参数,用户自定义判断返回的数据是否与原始数据关联

this.setValue = () => {
 let result = []
 this.vm[this.params.checkData].forEach((item) => {
  if(this.params.relative) {
   item.checked ? result.push(item) : "";
  }else{
   //删除checked属性
   let temp = {};
   (() => delete Object.assign(temp, item).checked)();
   item.checked ? result.push(item[this.params.key] || temp) : "";
  }
 });
 this.vm[this.params.result] = result
}

当数据长度大于2个时,需要判断2N次,相当消耗性能,优化一下:

'check-all', {
  twoWay: true,
  params: ['checkData', 'result', 'key','relative'],
  
  bind() {
   
  this.setValue = () => {
   let result = []
   if (this.params.relative) {
    this.vm[this.params.checkData].forEach((item) => {
     item.checked ? result.push(item) : "";
    });
   } else {
    this.vm[this.params.checkData].forEach((item) => {
     //删除checked属性
     let temp = {};
     (() => delete Object.assign(temp, item).checked)();
     item.checked ? result.push(item[this.params.key] || temp) : "";
    });
   }
   this.vm[this.params.result] = result
  };
   
  this.addChecked = () => {
   this.vm[this.params.checkData].forEach((item) => {
    Vue.set(item, 'checked', false)
   });
  };
  
  this.vm.$watch(this.params.checkData, (data) => {
   if(!data.length) return;
   data.every((item) => item.checked) ? this.set(true) : this.set(false);
   this.setValue()
  }, {deep: true});
  //当列表发生变化时重新绑定
  this.vm.$watch(this.params.checkData, (data) => {
   if(!data.length) return
   this.addChecked();
  });
  },
  // checkAll发生更改时 
  update(checkAll) {
   
   checkAll ? this.vm[this.params.checkData].forEach((item) => {
    item.checked = true
   }) : this.vm[this.params.checkData].forEach((item) => {
    item.checked = false
   });
   this.setValue()
  },
 }

这时只需要判断N+1次。

以上是“Vue自定义指令如何实现checkbox全选功能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: Vue自定义指令如何实现checkbox全选功能

本文链接: https://www.lsjlt.com/news/71120.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue自定义指令如何实现checkbox全选功能
    这篇文章主要介绍Vue自定义指令如何实现checkbox全选功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码:<!DOCTYPE html> <ht...
    99+
    2022-10-19
  • Vue自定义复制指令v-copy功能的实现
    使用自定义指令创建一个点击复制文本功能 1. 创建v-copy.js文件 import Vue from "vue"; // 注册一个全局自定义复制指令 `v-copy` Vue.d...
    99+
    2022-11-12
  • vue使用自定义指令实现按钮权限展示功能
    目录一、在src下新建directive文件夹二、定义index.js文件,在vue上注入自定义指令三、编写自定义指令四、使用一、在src下新建directive文件夹 二、定义i...
    99+
    2022-11-13
  • Vue中如何实现自定义指令上报Google Analytics事件统计功能
    这篇文章将为大家详细讲解有关Vue中如何实现自定义指令上报Google Analytics事件统计功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。发现问题一般前端开发离...
    99+
    2022-10-19
  • Vue如何自定义指令实现元素拖动
    这篇文章主要介绍了Vue如何自定义指令实现元素拖动的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue如何自定义指令实现元素拖动文章都会有所收获,下面我们一起来看看吧。一、自定义指令在使用自定义指令之前,先对自...
    99+
    2023-06-26
  • 怎么进行Vue自定义复制指令v-copy功能的实现
    这篇文章给大家介绍怎么进行Vue自定义复制指令v-copy功能的实现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用自定义指令创建一个点击复制文本功能 创建v-copy.js文件import Vue&nbs...
    99+
    2023-06-26
  • AngularJS怎么自定义指令实现面包屑功能
    这篇文章主要介绍了AngularJS怎么自定义指令实现面包屑功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:<!DOCTY...
    99+
    2022-10-19
  • vue全局注册自定义指令防抖怎么实现
    本文小编为大家详细介绍“vue全局注册自定义指令防抖怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue全局注册自定义指令防抖怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。全局注册自定义指令防抖...
    99+
    2023-06-30
  • vue怎么使用自定义指令实现按钮权限展示功能
    今天小编给大家分享一下vue怎么使用自定义指令实现按钮权限展示功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、在src...
    99+
    2023-06-30
  • Vue+element自定义指令如何实现表格横向拖拽
    目录element自定义指令实现表格横向拖拽自定义指令设置及常用自定义指令指令定义函数提供了几个钩子函数(可选)下面分享几个实用的 Vue 自定义指令element自定义指令实现表格...
    99+
    2022-11-13
    Vue element 自定义指令 表格横向拖拽
  • 如何通过Vue自定义指令实现前端埋点详析
    目录前言埋点上报方式都有哪些?一般对哪些数据做埋点?需求分析代码实现Click 类封装Exposure 类封装指令封装使用不足总结前言 在营销活动中,通过埋点可以获取用户的喜好及交互...
    99+
    2022-09-27
  • vue3使用自定义指令实现eldialog拖拽功能示例详解
    目录实现el-dialog的拖拽功能通过自定义指令实现拖拽功能实现拖拽功能使用方式实现el-dialog的拖拽功能 这里指的是 element-plus 的el-dialog组件,一...
    99+
    2022-11-13
  • React如何自定义视频全屏按钮实现全屏功能
    本篇内容介绍了“React如何自定义视频全屏按钮实现全屏功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、绘制全屏按钮绘制全屏按钮,并绑...
    99+
    2023-07-04
  • 基于Vue自定义指令如何实现按钮级权限控制
    这篇文章将为大家详细讲解有关基于Vue自定义指令如何实现按钮级权限控制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。思路:登录:当用户填写完账号和密码后向服务端验证是否正...
    99+
    2022-10-19
  • vue2如何实现directive自定义指令的封装与全局注册
    本文小编为大家详细介绍“vue2如何实现directive自定义指令的封装与全局注册”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue2如何实现directive自定义指令的封装与全局注册”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-05
  • Angularjs自定义指令如何实现三级联动选择地理位置
    这篇文章将为大家详细讲解有关Angularjs自定义指令如何实现三级联动选择地理位置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Angularjs自定义指令实现三级联动...
    99+
    2022-10-19
  • javascript如何实现自定义事件功能
    这篇文章主要介绍了javascript如何实现自定义事件功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概述自定义事件很难派上用场?为什么...
    99+
    2022-10-19
  • 如何在Vue3中实现自定义指令(超详细!)
    目录前言生命周期钩子的参数简化形式对象字面量在组件上使用指令几个实用的自定义指令自动聚焦v-focus防抖v-debounce节流v-throttle弹窗隐藏v-hide总结在开发V...
    99+
    2022-11-13
  • 使用vue自定义如何实现Tree组件和拖拽功能
    目录vue自定义实现Tree组件和拖拽功能vue2 + js版vue2 + ts 版总结vue自定义实现Tree组件和拖拽功能 实现功能:树结构、右键菜单、拖拽 效果图 vue2 ...
    99+
    2022-12-09
    vue自定义Tree组件 vue Tree组件 vue拖拽功能
  • angularJS如何实现自定义指令间的相互交互
    小编给大家分享一下angularJS如何实现自定义指令间的相互交互,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AngularJ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作