聊聊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与React的区别和优势对比
Dec 18 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
vue实现列表垂直无缝滚动
Apr 08 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
VUE递归树形实现多级列表
Jul 15 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 echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
js文字横向滚动特效
2015/11/11 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
实例讲解Python爬取网页数据
2018/07/08 Python
pandas中的series数据类型详解
2019/07/06 Python
Django--权限Permissions的例子
2019/08/28 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
悬挂训练绳:TRX
2017/12/14 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
物业管理毕业生个人的求职信
2013/11/30 职场文书
基层工作经历证明
2014/01/13 职场文书
静心口服夜广告词
2014/03/20 职场文书
小学生新年寄语
2014/04/03 职场文书
实习评语大全
2014/04/26 职场文书
夏季药店促销方案
2014/08/22 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
秋冬农业生产标语
2014/10/09 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
基于Python实现股票收益率分析
2022/04/02 Python
Android自定义双向滑动控件
2022/04/19 Java/Android