当前位置: 首页 > Web前端 > vue.js

触发一个自定义指令点击而不是本身

时间:2023-03-31 23:46:58 vue.js

constclickoutsideObj={//初始化命令bind(el,binding,vnode){functiondocumentHandler(e){//这里判断点击的元素是否是自己,然后返回if(el.contains(e.target)){return错误的;}//在指令中判断一个函数是否绑定if(binding.expression){//如果一个函数被绑定,则调用该函数,其中binding.value是handleClose方法binding.value(e);}}//给当前元素绑定一个私有变量,这样事件监听器可以在unbind中释放el.__vueClickOutside__=documentHandler;document.addEventListener('点击',documentHandler);},update(){},unbind(el,binding){//移除事件监听document.removeEventListener('click',el.__vueClickOutside__);删除el.__vueClickOutside__;}}exportdefault{install:(Vue)=>{Vue.directive('clickoutside',clickoutsideObj);}};index.jsimport来自'./permission'的许可;从'./loadmore'导入loadmore;从'./clickoutside'导入clickoutside;exportdefault{permission,loadmore,clickoutside};在mandirectiveDialogChange(){if(this.cursorEditFlag||this.confirmFlag){this.cursorEditFlag=falsethis.drawer=truereturn}中引入这个。drawer=false}//或directiveDialogChange(){if(this.cursorEditFlag||this.confirmFlag){this.cursorEditFlag=falsethis.drawer=truethis.setLook=falsereturn}if(this.checkFormDataChange&&this.drawer){if(this.setLook){returnfalse}else{this.setLook=truethis.$confirm('更新内容未保存,离开后不保存,是否继续?','提示',{confirmButtonText:'OK',cancelButtonText:'Cancel',type:'warning'}).then(()=>{this.drawer=falsethis.setLook=false}).catch(()=>{self.drawer=truethis.setLook=false})}returnfalse}this.drawer=false},**点击编辑图标显示下拉框并向下拉框添加自定义命令。在下拉框外点击时,切换flag,隐藏框,显示图标。**如果点击一个没有被自定义命令绑定的dom元素,会触发v-clickoutside之后的函数。这个函数需要做一个标识,防止里面变化的状态一直被触发(会陷入死循环){{periodName}}剩余{{dateCount}}天

data(){return{dataClick:0}}自定义指令对应的方法changeStatusDate(){if(this.dataClick===1){this.dataClick=0returnfalse}if(this.ableObj.weekDataIsble){this.$set(this.ableObj,'weekDataIsble',false)}else{returnfalse}},点击触摸发生的事件openEdit(type){switch(type){case'pesonIsble':this.firstClick=1breakcase'lookIsable':this.lookClick=1breakcase'weightIsble':this.weightClick=1breakcase'weekDataIsble':this.dataClick=1break}for(letkeyinthis.ableObj){this.ableObj[key]=false}this.$set(this.ableObj,type,!this.ableObj[type])},