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

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

### Vue.js 中 v-on 指令的使用方法 `v-on` 是 Vue.js 提供的一个重要指令,用于监听 DOM 事件并触发相应的回调函数。它的基本语法如下: ```html v-on:event-name="methodName" ``` 其中 `event-name` 表示要监听的原生 DOM 事件名称(如 click、mouseover),而 `methodName` 则表示当该事件被触发时所执行的方法名。 #### 基本用法 最简单的形式是直接绑定一个方法到某个事件上。例如,在按钮点击时调用一个方法: ```html <button v-on:click="greet">Greet</button> <script> export default { methods: { greet() { console.log('Hello!'); } } }; </script> ``` 此代码片段展示了如何通过 `v-on:click` 绑定 `greet` 方法来响应用户的点击行为[^3]。 为了简化书写方式,可以省略 `v-on:` 的前缀,仅保留 `@` 符号作为替代写法: ```html <button @click="greet">Greet</button> ``` 这种缩写的表达更加简洁直观,并且广泛应用于实际项目当中。 #### 动态参数传递 除了静态绑定外,还可以动态传入额外的数据给目标方法。比如下面的例子中,我们将鼠标位置坐标附加到了事件处理器里: ```html <div @mousemove="updateCoordinates($event)"> Move your mouse here... </div> <script> export default { data() { return { coordinates: null }; }, methods: { updateCoordinates(event) { this.coordinates = `${event.clientX}, ${event.clientY}`; } } }; </script> ``` 这里 `$event` 自动包含了原始浏览器事件对象的信息[^3]。 #### 多重事件处理 如果希望同一个控件上的不同动作分别对应不同的逻辑,则可以通过多次声明实现多重事件支持。例如同时监控输入框的变化以及失去焦点两个时刻的行为变化情况: ```html <input @input="onInputChanged" @blur="validateInput"> <script> export default { methods:{ onInputChanged(e){ console.log(`Value changed to:${e.target.value}`); }, validateInput(){ console.warn("Validating input..."); } } } </script> ``` 以上实例说明了在一个元素上设置多个独立运作但互不干扰的不同类型的侦听器的可能性[^2]。 #### 使用修饰符优化交互体验 Vue 还允许开发者借助一些预定义好的特殊标记——即所谓的“修饰符”,进一步增强组件的功能特性而不必手动编写冗长繁琐的条件判断语句。常见的几个例子包括但不限于 `.stop`,`.prevent`,`capture`等等。具体含义可查阅官方文档获取更详尽解释[^3]。 例如防止表单提交刷新页面: ```html <form @submit.prevent="handleSubmit"> <!-- form fields --> <button type="submit">Submit</button> </form> ``` 在这个场景下,“.prevent”会自动阻止默认的动作发生(在这里就是阻止整个网页重新加载),从而让AJAX请求或者其他异步流程得以顺利开展下去[^3]。 --- ### 总结 综上所述,`v-on` 不仅仅是简单地把 JavaScript 函数映射至 HTML 属性那么简单;它背后蕴含着丰富的扩展性和灵活性设计哲学理念,使得前端工程师能够快速高效地完成复杂业务需求下的各种定制化解决方案开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值