聊聊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 element-ul实现展开和收起功能的实例代码
Nov 25 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
关于Vue Router的10条高级技巧总结
May 06 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 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
第十四节 命名空间 [14]
2006/10/09 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
使用python Django做网页
2013/11/04 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
python selenium操作cookie的实现
2020/03/18 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
Python实现随机爬山算法
2021/01/29 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
如何强制垃圾回收
2015/10/06 面试题
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
Nginx利用Logrotate实现日志分割
2022/05/20 Servers