聊聊vue 中的v-on参数问题


Posted in Vue.js onJanuary 29, 2021

vue中v-on:clock的使用

最近在学习vue.js框架。记下其中遇到的一些问题,以便以后查阅。

首先,这是一个页面(为了便于观察,将各个标签都一一着色):

聊聊vue 中的v-on参数问题

其中html代码:

<div class="groupbody ">
   <ul class="list ">
     <li v-for="cell in todo.groupbody " class="pagegroupcell " v-on:click="exchange($event)">
       <div class="pagecelltext ">{{ cell.left }}</div>
       <div class="pagecellmin">{{ cell.min }}</div>
       <img src="img/images/direction/right.png" style="width: 20px;height: 30px;float: right;margin-top: 5px;">
       <div class="pagecellmsg ">{{ cell.right }}</div> 
      </li>
    </ul>
    <div class="clear "></div>
</div>

js部分的代码:

exchange: function (event) {
            alert("开始执行方法");
            var a = event.target;
            var cellimg = a.getElementsByTagName("div")[0];
            var msg = cellimg.innerText; 
            page2datas.todos[0].groupheader = msg;
            alert("方法执行中"); 
            var b = document.getElementById("page1");
            b.style.display = "none";
            var c = document.getElementById("page2");
            c.style.display = "block";
            alert("方法执行结束");
          }

这时候如果点击cell中有颜色的区域(即点击li标签的字标签的时候),只有第一个alert( )方法执行,而后面的两个方法并不执行。

原因就是这个方法的参数event:

如果标签绑定的方法中有参数$event,这时候就可以利用event.target,获取到当前点被绑定这个点击事件的标签。

但是这个参数也可能会造成一些问题,比如如果想不论点击li标签的哪一个部分都要把点击事件的方法执行完整,这时候参数event就不适用了。这时候只能另想其他办法。

解决方法:

在li中有v-for循环,其中有一个cell对象,这个对象居居士li标签中的数据。只需要把这个对象传递给点击事件的方法,就可以通过这个对象去实现刚才想要达到的目的。

修改之后的html代码:

<div class="groupbody ">
   <ul class="list ">
     <li v-for="cell in todo.groupbody " class="pagegroupcell " v-on:click="exchange(cell)">
       <div class="pagecelltext ">{{ cell.left }}</div>
       <div class="pagecellmin">{{ cell.min }}</div>
       <img src="img/images/direction/right.png" style="width: 20px;height: 30px;float: right;margin-top: 5px;">
       <div class="pagecellmsg ">{{ cell.right }}</div> 
      </li>
    </ul>
    <div class="clear "></div>
</div>

修改之后的js代码:

exchange: function (cell) {
        alert("开始执行方法"); 
        page2datas.todos[0].groupheader =cell.left;
        alert("执行中");
        var b = document.getElementById("page1");
        b.style.display = "none";
        var c = document.getElementById("page2");
        c.style.display = "block";
        alert("方法执行结束");
      }

这时候,整个电击事件的执行方法都可以完整执行下来,后续页面的切换也可以完成。

补充:Vue中关于v-on绑定点击事件时候的参数问题

v-on的绑定点击事件的时候关于参数有三种情况,分别如下 :

绑定的方法后面没有括号

<button @click="btnClick">点击</button>
 <script>
 const app = new Vue({
  methods:{
  btnClick(event){
  // 此时event就是当前点击的对象
   console.log(event)
  }
  }
 })
 </script>

聊聊vue 中的v-on参数问题

绑定的方法后面有括号

<button @click="btnClick()">点击</button>
<script>
 const app = new Vue({
 methods:{
  btnClick(event){
  // 此时event是undefined
  console.log(event)
  }
 }
 })
</script>

聊聊vue 中的v-on参数问题

绑定的方法后面有括号,需要传递参数

<button @click="btnClick(123)">点击</button>
<script>
 const app = new Vue({
 methods:{
  btnClick(event){
  // 此时event是123
  console.log(event)
  }
 }
 })
</script>

绑定的方法后面有括号,需要传递参数,并且需要当前点击的对象

<!-- 这种情况下,如果需要传递当前点击的对象,参数必须是$event -->
<!-- 第一个位置如果要传数字的话,就不需要加引号,如果要传一个字符串的话,就必须要加引号,因为如果不加引号,Vue就会当做一个变量来解析,此时如果在data中没有定义的话,就会报错 -->
<button @click="btnClick(123,$event)">点击</button>
<script>
 const app = new Vue({
 methods:{
  btnClick(num,event){
  // 此时num是123,event是当前点击的对象,
  console.log(num,event)
  }
 }
 })
</script>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Vue.js 相关文章推荐
Vue如何循环提取对象数组中的值
Nov 18 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
vue实现滚动鼠标滚轮切换页面
Dec 13 Vue.js
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 #Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 #Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 #Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 #Vue.js
vue穿梭框实现上下移动
Jan 29 #Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 #Vue.js
Vue ​v-model相关知识总结
Jan 28 #Vue.js
You might like
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
Python内置函数dir详解
2015/04/14 Python
简述Python2与Python3的不同点
2018/01/21 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
python学习开发mock接口
2019/04/28 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python文件读取失败怎么处理
2020/06/23 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
大学生党员个人对照检查材料范文
2014/09/25 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
团组织推荐意见
2015/06/05 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
Nginx进程调度问题详解
2021/09/25 Servers