【精讲】vue 比较watch侦听方法、v-on(基本使用、修饰符、传参)

39 篇文章 0 订阅
16 篇文章 0 订阅

目录

比较watch方法

v-on

基本使用

修饰符

传参


第一部分:比较watch侦听方法

<div id="root">
            <h1>计算属性:computed</h1>
         
     <!-- 添加页面插值语法 -->
            {{fullName}}
            <h1>方法:methods</h1>
            {{fullName2()}}
            <h1>侦听器:watch</h1>
            {{watchFullName}}
            <h1>年龄:age</h1>
            {{age}}
        </div>

        <script type="text/javascript">
      
     //定义一个变量并给定一个值  会根据结果去判断该值是否会发生变化
 
           let  other = 'hello my name'
            const vm = new Vue({
                el: '#root',
                data() {
                    return {
                      
 //编辑数据
                        fistname: 'zhang',
                        lastname: 'san',
                        watchFullName:'zhangsan',
                        age: '19'
                    }
                },
          
     // 比较方法,计算属性,事件监听
                methods: {
                    fullName2() {
                        console.log('使用了一次fullName2()方法')
                        return this.fistname + this.lastname+other
                    }
                },
                computed: {
                    fullName() {
                        console.log('使用了一次fullName()计算属性')
                        return this.fistname + this.lastname+other
                    }
                },
              
 /* firstName(newval,oldval){//监听器中有两个参数 一个是newval新的值
                一个是oldval是老值
                console.log(newval);
                console.log(oldval);
                } */

                watch: {
                    fistname(newfist,newlast) {
                    console.log('fistname触发了watch');
                      // this.watchFullName = this.fistname + this.lastname+other
                      this.watchFullName = this.newfist+this.newlast+other
                    },
                    lastname(newfist,newlast) {
                    console.log('lastname触发了watch');
                     // this.watchFullName = this.fistname + this.lastname+other
                      this.watchFullName = this.newfist+this.newlast+other
                    }
                }
            })
        </script>

拓展watch侦听案例:

    <div id="root">
            <!-- 添加插值语法 -->
            <div>今天天气很热{{info}}</div>
            <!-- 添加点击事件方法 -->

            <button @click="change">点击</button>
        </div>
        <script type="text/javascript">
            const vm = new Vue({
                el:'#root',
                data(){
                    return{
                        //定义一个数据名等于true(自定义数据名)
                        isHot:true
                    }
                },
                //下面是计算属性
                computed:{
                    //根据方法判断该语句是真还是假,若是真那么是炎热,若是假,那么是凉爽
                    info(){
                        return this.isHot ? '炎热':'凉爽'
                    }
                },
                methods:{
                    //采用点击事件(方法)
                    change(){
                        //设置开关键,点击后变更真假
                        this.isHot = !this.isHot
                    }
                },
                //第一种写法
                watch:{
                    immediate:true,//初始化时让handler调用一下
                    handler(newvalue,oldvalue){
                        console.log('isHot被修改了',newvalue,oldvalue)
                    }
                }
            })
            
            
            // 第二种侦听事件写法
            //第二个写法的好处是 在不明后期会不会被改动时,可以写在外面。
            // vm.$watch('isHot',{
            //         immediate:true,//初始化时让handler调用一下
            //         handler(newvalue,oldvalue){
            //             console.log('isHot被修改了',newvalue,oldvalue)
            //         } 
            // })

        </script>

第二部分:v-on(基本使用

<div id="root">
         
   <!-- 这里使用的是v-on:绑定一个点击事件,v-on是一个监听事件 -->
            <div @click="change()">点击</div>
        
    <!-- 方法可以加括号也可以省略 -->
            <input @input="changeinput" />
        </div>
        <script type="text/javascript">
            const vm = new Vue({
            
    //挂载id属性
                el: '#root',
                data() {
                    return {

                    }
                },
             
   //添加方法全聚集该函数内部
                methods: {
                    change() {
                    console.log('111')
                    },
             
       //方法在上面可以加()也可以不加()
                    changeinput() {
                    console.log('222')
                    }
                }
            })
        </script>

第三部分v-on(修饰符

<style>
            .div {
                width:200px;
                height: 100px;
                background: #f00;
            }
        </style>
    </head>
    <body>
        
        <div id="app">
             <div @click="divClick" class="div">
            <!--1.stop的使用,btn的click事件不会传播,不会冒泡到上层,调用event.stopPropagation() -->
                <button type="button" @click.stop="btnClick">点击</button>
           </div>
        </div>
        <script>
            const vm = new Vue({
                el: '#app',
                data() {
                    return {

                    }
                },
                methods:{
                    divClick(){
                        console.log('点击了div');
                    },
                    btnClick(){
                        console.log('点击了btn');
                    }
                }

            })
        </script>

案例与事件归总:

<!-- 准备一个容器 -->
        <div id="root">
            <!-- 出现滚动条:overflow:auto;
             滚动事件绑定@scroll="demo"-->

            <h2>
                欢迎来到{{name}}学习
            </h2>
            <!-- 这里的.prevent是事件修饰符(阻止默认行为),设置上了就不会让a标签点击后就不会发生其它弹跳  或者是在下面的showInfo中添加
            event.preventDefault();//指的是阻止默认行为-->

            <a href="https://daohang.qq.com/?fr=hmpage" @click.prevent="showInfo">点我提示信息</a>
          <!-- .prevent 对 click 添加修饰符-->
             
             <!-- stop:阻止事件冒泡(常用); -->

            <div class="demo1" @click="showInfo">
                <!-- 在这种内外有两个点击事件的情况下,执行点击会有跳两次,若使用stop那么就不会了,他只会执行一次便停止
                 该stop必须绑定内部点击事件,外部不执行-->

             <button @click.stop="showInfo">点我提示信息</button>
            </div>
            
             <!-- 3,once 事件只触发一次(常用);点击一次了就不能点击第二次了 第二次即失效-->
            <button @click.once="showInfo">点我提示信息</button>
             
            
              <!-- 5,self:只有event.tatget是当前操作的元素时才触发事件;
               该修饰符与stop类似,你可以绑定某块点击事件的元素,后面就不会再执行了。
               -->

             
             
        </div>
        
        <!-- vue中的事件修饰符:
           1,prevent:阻止默认事件(常用);
           2,stop:阻止事件冒泡(常用);
           3,once 事件只触发一次(常用);
           4,capture:使用事件的捕获模式;
           5,self:只有event.tatget是当前操作的元素时才触发事件;
           6,passive:事件的默认行为立即执行,无需等待事件回调执行完毕;
           -->

        <script type="text/javascript">
            const vm = new Vue({
                el:'#root',
                data:{
                     name:'学校',
                },
                methods:{
                    showInfo(event){
                        // console.log(event.target);
                        alert('点我查询');
                    }
                }
            })
            
            
        </script>

第四部分v-on(传参

<div id="root">
          
 <!-- 事件传多个参数 -->
            <!-- 第一个是传一个参数 -->

            <button @click="btnClick1(123)">点击1</button>
         
   <!-- 第二个是传多个参数 -->
            <button @click="btnClick2()">点击2</button>
        </div>
  
     <!-- 注意
                    如果我只要传递e事件 那么可以不写参数,当然也可以写一个参数叫$event
                    <button @click="btnClick">按钮5</button>
         <button @click="btnClick($event)">按钮5</button> -->

        <!-- 事件传多个参 -->
        <!--  如果我要传递多个参数  那么既要写参数,也要写$event,方法中用e和形参进行接收
                    <button @click="btnClick($event,123)">按钮6</button> -->

        <script type="text/javascript">
            const vm = new Vue({
                el: '#root',
                data() {
                    return {

                    }
                },
                methods: {
                    btnClick1(val) {
                        console.log(val)
                    },
                    btnClick2($event,val) {
                        console.log('如果我只要传递e事件 那么可以不写参数,当然也可以写一个参数叫$event')
                    }
                }
            })
        </script>

查看更多事件修饰点击下方链接,可以查看更多!!!!!:

事件处理 — Vue.js

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Vue中的v-on指令用于绑定事件处理程序。它可以用于监听DOM事件,自定义组件事件以及指令事件。v-on的值通常是一个方法名或者一个内联JavaScript语句,当触发事件时,这个方法或语句会被执行。 事件对象是指在事件处理程序中自动传入的参数,包含了关于事件的所有信息,如事件类型、触发元素、鼠标位置等。在Vue中,事件对象会作为第一个参数自动传入事件处理程序中。我们可以在方法使用$event来访问这个事件对象。 修饰符是一种用于修改事件行为的特殊指令。它们以点号开头,放在事件名之后,用于控制事件如何响应。Vue提供了多种修饰符,例如.stop、.prevent、.capture、.self、.once等。 常用的修饰符包括: - .stop:阻止事件继续传播 - .prevent:阻止事件的默认行为 - .capture:使用事件捕获模式,即从父元素向子元素传播事件 - .self:只在事件触发元素自身时触发事件处理程序 - .once:只触发一次事件处理程序 例如,下面是一个使用v-on指令、事件对象和修饰符的例子: ``` <button v-on:click.stop.prevent="handleClick">Click Me</button> ... methods: { handleClick: function(event) { // 阻止事件传播和默认行为 event.stopPropagation(); event.preventDefault(); } } ``` 在这个例子中,当按钮被点击时,handleClick方法会被执行。通过.stop.prevent修饰符,事件不会继续传播,并且默认行为也会被阻止。在方法中,我们使用event对象来访问事件信息,并通过stopPropagation()和preventDefault()方法来控制事件行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

共创splendid--与您携手

鼓励会让我为您创造出更优质作品

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值