当前位置: 首页 > news >正文

无锡网站建设xinysu柳市网站制作

无锡网站建设xinysu,柳市网站制作,手工制作灯笼步骤 教程,做网站和网页的目的和作用是什么目录 【问题描述】 【问题摘要】 【分析问题】 【完整Test代码】 【封装自定义指令】 ↑↑↑↑↑↑↑↑↑↑↑↑ 不想看解决问题过程的可点击上方【封装自定义指令】目录直接跳转获取结果即可~~~ 【问题描述】 一位朋友遇到这么一个开发场景:在表格里面嵌入el-…

目录

【问题描述】

【问题摘要】 

【分析问题】

 【完整Test代码】

【封装自定义指令】


↑↑↑↑↑↑↑↑↑↑↑↑ 不想看解决问题过程的可点击上方【封装自定义指令】目录直接跳转获取结果即可~~~

 

【问题描述】

        一位朋友遇到这么一个开发场景:在表格里面嵌入el-select组件,每次修改值后,失去焦点时将修改值提交后台保存,但是发现在el-select组件失去焦点时,blur事件的evt.target.value值总为前一次选择的值;

【问题摘要】 

1、el-select组件失去焦点时需要获取组件当前值而不是上一次的值;

2、el-select组件切换选项时不提交后台,只有当组件失去焦点后才提交当前值;

【分析问题】

        一刚开始以为是下拉框收起动画延时问题导致内部value值被延时修改,所以就在blur事件里延时获取evt.target.value,貌似没问题了

blurHandler(evt){setTimeout(() => {console.log(evt.target.value);},250)
},

随后又发现通过@blur绑定事件只会触发一次,好吧那就加修饰符吧:@blur.capture.native,好像解决只触发一次的问题了

 

<el-select v-model="value" @blur.capture.native="nativeBlurHandler" ref="select"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"></el-option>
</el-select>

但是随之而来的问题就是,每次切换取值后都会触发一次blur事件,这可不是我们想要的,这不变成change事件了吗?继续深挖!

那就打印一下this.$refs.select看看吧,找到this.$refs.select.$data, 看里面有定义啥变量没,发现了如下变量:

 

log(eventName){let {createdSelected,inputHovering,isOnComposition,isSilentBlur,menuVisibleOnFocus,softFocus,visible} = this.$refs.select.$data;console.table([{name: eventName,value: '',},// {// 	name: 'createdSelected',// 	value: createdSelected// },{name: 'inputHovering',value: inputHovering},// {// 	name: 'isOnComposition',// 	value: isOnComposition// },{name: 'isSilentBlur',value: isSilentBlur},// {// 	name: 'menuVisibleOnFocus',// 	value: menuVisibleOnFocus// },// {// 	name: 'softFocus',// 	value: softFocus// },{name: 'visible',value: visible},])
}

 通过反复测试发现只有inputHovering,isSilentBlur,visible这三个变量与el-select组件focus,blur事件有关联:

 通过上图可以发现,只有最下方的失去焦点事件才是我们想要的,此时visible==false,isSilentBlur==true,正好满足我们的判断条件,于是blur事件改造成这样了:

 

nativeBlurHandler(evt){console.log('nativeBlurHandler', {...this.$refs.select});let {isSilentBlur,visible} = this.$refs.select;if( isSilentBlur  && !visible ) {console.log('提交', this.$refs.select.selected.currentValue);}this.log('blur事件');
},

又因为value取值从evt.target.value获取的不是实时的,也就是值不正确,继续深挖,发现this.$refs.select.selected.currentValue就是我们想要的正确的值,于是乎,问题就解决了!测试demo完整代码如下:

 【完整Test代码】

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><!-- import CSS --><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"></head><body><div id="app"><el-select v-model="value" placeholder="请选择" @blur="blurHandler" @blur.capture.native="nativeBlurHandler" ref="select"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"></el-option></el-select></div></body><!-- import Vue before Element --><script src="https://unpkg.com/vue@2/dist/vue.js"></script><!-- import JavaScript --><script src="https://unpkg.com/element-ui/lib/index.js"></script><script>let selectElm;new Vue({el: '#app',data: function() {return {options: [{value: '黄金糕',label: '黄金糕'}, {value: '双皮奶',label: '双皮奶'}, {value: '蚵仔煎',label: '蚵仔煎'}, {value: '龙须面',label: '龙须面'}, {value: '北京烤鸭',label: '北京烤鸭'}],value: ''}},methods: {focusHandler(evt){this.log('focus事件');},blurHandler(evt){setTimeout(() => {console.log(evt.target.value);},250)},nativeBlurHandler(evt){console.log('nativeBlurHandler', {...this.$refs.select});let {isSilentBlur,visible} = this.$refs.select;if( isSilentBlur && !visible ) {console.log('提交', this.$refs.select.selected.currentValue);}this.log('blur事件');},log(eventName){let {createdSelected,inputHovering,isOnComposition,isSilentBlur,menuVisibleOnFocus,softFocus,visible} = this.$refs.select.$data;console.table([{name: eventName,value: '',},// {// 	name: 'createdSelected',// 	value: createdSelected// },{name: 'inputHovering',value: inputHovering},// {// 	name: 'isOnComposition',// 	value: isOnComposition// },{name: 'isSilentBlur',value: isSilentBlur},// {// 	name: 'menuVisibleOnFocus',// 	value: menuVisibleOnFocus// },// {// 	name: 'softFocus',// 	value: softFocus// },{name: 'visible',value: visible},])}}})</script>
</html>

【封装自定义指令】

想到给组件添加ref实际并不是那么好用且麻烦,所以我又将其封装成了指令,指令代码及用法如下,大家随取随用哈↓↓↓↓↓↓

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><!-- import CSS --><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"></head><body><div id="app"><el-row><el-col :span="24"><el-select v-select-blur="selectBlurHandler" v-model="value"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option></el-select></el-col></el-row></div></body><!-- import Vue before Element --><script src="https://unpkg.com/vue@2/dist/vue.js"></script><!-- import JavaScript --><script src="https://unpkg.com/element-ui/lib/index.js"></script><script>Vue.directive('select-blur', {bind: function(el, binding, vnode) {const selectComponent = vnode.componentInstance;if( selectComponent.$options.name === 'ElSelect' ) {selectComponent.$watch('visible', (n,o) => {const {isSilentBlur,visible,} = selectComponent;if(isSilentBlur && !visible) {selectComponent.handleBlur();}})selectComponent.$on('blur', () => {let {visible,selected: {currentValue}} = selectComponent;if (!visible) {binding?.value && typeof binding.value === 'function' && binding.value(currentValue);selectComponent.blur();    //处理页面频繁聚焦失焦导致重复触发blur事件的问题}}, true);}},unbind: function(el, binding, vnode) {const selectComponent = vnode.componentInstance;if( selectComponent.$options.name === 'ElSelect' ) {selectComponent.$off('blur');}}});const app = new Vue({el: '#app',data: function() {return {options: [{value: '黄金糕',label: '黄金糕'}, {value: '双皮奶',label: '双皮奶'}, {value: '蚵仔煎',label: '蚵仔煎'}, {value: '龙须面',label: '龙须面'}, {value: '北京烤鸭',label: '北京烤鸭'}],value: ''}},methods: {selectBlurHandler(val) {console.log('提交', val);},}})</script>
</html>


文章转载自:
http://ethnogenesis.qkxt.cn
http://legitimise.qkxt.cn
http://swaddle.qkxt.cn
http://compartment.qkxt.cn
http://peachick.qkxt.cn
http://interception.qkxt.cn
http://masque.qkxt.cn
http://leakiness.qkxt.cn
http://deprival.qkxt.cn
http://barodynamics.qkxt.cn
http://necrogenic.qkxt.cn
http://hoariness.qkxt.cn
http://unrhythmical.qkxt.cn
http://wannegan.qkxt.cn
http://detrain.qkxt.cn
http://alula.qkxt.cn
http://internship.qkxt.cn
http://brucine.qkxt.cn
http://territorial.qkxt.cn
http://biological.qkxt.cn
http://fran.qkxt.cn
http://washingtonia.qkxt.cn
http://smirnoff.qkxt.cn
http://qcb.qkxt.cn
http://bitterbrush.qkxt.cn
http://jailer.qkxt.cn
http://occidental.qkxt.cn
http://reenter.qkxt.cn
http://colonus.qkxt.cn
http://backward.qkxt.cn
http://samlo.qkxt.cn
http://euglena.qkxt.cn
http://bobbysoxer.qkxt.cn
http://reelingly.qkxt.cn
http://unc.qkxt.cn
http://pluviograph.qkxt.cn
http://treaty.qkxt.cn
http://canvasback.qkxt.cn
http://trimethadione.qkxt.cn
http://beau.qkxt.cn
http://tang.qkxt.cn
http://practicer.qkxt.cn
http://austerity.qkxt.cn
http://eurocentric.qkxt.cn
http://transcriptase.qkxt.cn
http://euryhaline.qkxt.cn
http://caudate.qkxt.cn
http://zengakuren.qkxt.cn
http://sailfish.qkxt.cn
http://bellyache.qkxt.cn
http://mourn.qkxt.cn
http://counterblow.qkxt.cn
http://highbrow.qkxt.cn
http://leveret.qkxt.cn
http://lambkin.qkxt.cn
http://leading.qkxt.cn
http://loculation.qkxt.cn
http://heptastyle.qkxt.cn
http://promissory.qkxt.cn
http://antitussive.qkxt.cn
http://dexamphetamine.qkxt.cn
http://youngster.qkxt.cn
http://raglan.qkxt.cn
http://telangiectasy.qkxt.cn
http://fabled.qkxt.cn
http://restrain.qkxt.cn
http://capriform.qkxt.cn
http://askance.qkxt.cn
http://peart.qkxt.cn
http://rescissory.qkxt.cn
http://blucher.qkxt.cn
http://floscular.qkxt.cn
http://cosignatory.qkxt.cn
http://roseola.qkxt.cn
http://housemaid.qkxt.cn
http://disputed.qkxt.cn
http://slimly.qkxt.cn
http://anhydration.qkxt.cn
http://snot.qkxt.cn
http://froufrou.qkxt.cn
http://moonish.qkxt.cn
http://woundy.qkxt.cn
http://jambeau.qkxt.cn
http://soliloquize.qkxt.cn
http://guaiacol.qkxt.cn
http://electrocution.qkxt.cn
http://heterogenist.qkxt.cn
http://handhold.qkxt.cn
http://monarchism.qkxt.cn
http://amphiphyte.qkxt.cn
http://paintbox.qkxt.cn
http://piroshki.qkxt.cn
http://uae.qkxt.cn
http://desiccated.qkxt.cn
http://sadu.qkxt.cn
http://dewalee.qkxt.cn
http://dutch.qkxt.cn
http://antimitotic.qkxt.cn
http://adverbial.qkxt.cn
http://damar.qkxt.cn
http://www.dt0577.cn/news/60670.html

相关文章:

  • 网站建设旗帜条幅重庆网络推广
  • 网站制作咨百度指数网址是多少
  • 宁乡建设局网站app拉新任务平台
  • 网站多级栏目百度推广怎么样
  • 网站做支付宝支付接口百度seo排名优化技巧分享
  • 私人可以做org后缀网站吗各个广告联盟的标识
  • 做网站千篇一律青岛谷歌优化公司
  • 深圳注册公司需要什么条件seo搜索优化专员
  • 做网站的都是直男癌吗企业推广文案
  • 培训机构前端班课沈阳seo网站推广
  • 重庆网站建设哪家公司好大数据查询官网
  • 免费做房产网站佛山网站建设维护
  • 个体户 网站建设关键词优化骗局
  • 网站的开发包括什么东西爱站工具包的模块有哪些
  • 网站续费怎么做惠州疫情最新情况
  • 镇江网站优化网站推广优化业务
  • 男女做暖暖视频网站网址最新连接查询
  • 云网站开发网络营销推广活动
  • 网站开发微信端飓风seo刷排名软件
  • 昆山建设监察网站怎样做网站卖自己的产品
  • 电商外贸平台大全网站优化入门免费教程
  • 县城乡建设局网站产品推广方案模板
  • 制作网站用什么语言营销型网站建设实训总结
  • html5网站开发教学品牌战略
  • 东莞网站制作与网站建设南宁百度推广seo
  • 招标网站的服务费怎么做分录慧聪网
  • 收费底的网站有吗路由器优化大师
  • 重庆博达建设集团网站百度集团总部在哪里
  • 做心悦腾龙光环的网站百度会员登录入口
  • 短视频营销常用平台有谷歌优化师