聊聊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中defineProperty和Proxy的区别详解
Nov 30 Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
vue+element UI实现树形表格
Dec 29 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 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数据过滤的方法
2013/10/30 PHP
php封装的page分页类完整实例
2016/10/18 PHP
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
javascript几个易错点记录
2014/11/26 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
记录Django开发心得
2014/07/16 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
初中校园广播稿
2014/02/02 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
消防志愿者活动方案
2014/08/23 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
销售内勤岗位职责
2015/02/10 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
Python数据分析之pandas函数详解
2021/04/21 Python
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
MySQL 分组查询的优化方法
2021/05/12 MySQL
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
Python字典的基础操作
2021/11/01 Python
python实现商品进销存管理系统
2022/05/30 Python