vue中v-on的参数问题

vue中v-on:clock的使用

最近在学习vue.js框架。记下其中遇到的一些问题,以便以后查阅。
首先,这是一个页面(为了便于观察,将各个标签都一一着色):

其中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("方法执行结束");
           }

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

v-on:click 动态参数传递是指可以根据组件的具体需求,在触发 click 事件时传递不同的参数。这样可以增强组件的灵活性和复用性。 在 Vue ,我们可以通过以下方式来实现 v-on:click 动态参数传递: 1. 使用方法调用 通过调用方法来传递参数是最常用的方式。我们可以在方法定义需要传递的参数,然后在模板调用方法并传递参数。例如: ```html <template> <button @click="handleClick('hello')">点击我</button> </template> <script> export default { methods: { handleClick(text) { console.log(text) } } } </script> ``` 2. 使用 $event 对象 $event 是 Vue 在事件触发时自动传递的一个参数,它可以获取到当前事件的信息,比如鼠标的位置等。在传递动态参数时,我们可以通过 $event 对象来传递额外的参数。例如: ```html <template> <button @click="handleClick('hello', $event)">点击我</button> </template> <script> export default { methods: { handleClick(text, event) { console.log(text, event) } } } </script> ``` 3. 使用 bind 方法 通过 bind 方法可以将参数绑定到特定的函数。例如: ```html <template> <button @click="handleClick.bind(this, 'hello')">点击我</button> </template> <script> export default { methods: { handleClick(text) { console.log(text) } } } </script> ``` 总之,通过 v-on:click 动态参数传递,我们可以更加灵活地对组件进行设置,既可以传递静态参数,也可以通过方法调用、$event 对象、bind 方法等方式传递动态参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值