聊聊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 26 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 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
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
python cookielib 登录人人网的实现代码
2012/12/19 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
Python实现登录接口的示例代码
2017/07/21 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
python 用struct模块解决黏包问题
2020/11/07 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
Python爬虫开发与项目实战
2020/12/16 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
毕业自荐书
2013/12/09 职场文书
新教师岗前培训方案
2014/06/05 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
详解如何使用Nginx解决跨域问题
2022/05/06 Servers