vue的常用指令和事件修饰符

本文详细介绍了Vue.js中常用的指令,包括数据绑定、条件渲染、列表渲染、事件处理等内容,并解释了每个指令的具体用法及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常用指令
1.v-text
解释:更新元素的 textContent

<div id="app">
    <h2 v-text="text"></h2>
</div>

<script>
    let vm = new Vue({
        el:'#app',
        data:{text:"<span>html标签</span>"}
    })
</script>

2.v-html
解释:更新元素的 innerHTML

<div id="app">
    <h2 v-html="text"></h2>
</div>

<script>
    let vm = new Vue({
        el:'#app',
        data:{text:"<span>html标签</span>"}
    })
</script>

3.v-cloak
解释:
①这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
②防止刷新页面,网速慢的情况下出现{{ message }}等数据格式

<div id="app">
    <h1 v-cloak>{{text}}</h1>
</div>

<script>
    let vm = new Vue({
        el:'#app',
        data:{text:"<span>html标签</span>"}
    })

4.v-if 和 v-show
条件渲染

v-if:根据表达式的值的真假条件,销毁或重建元素

v-show:根据表达式之真假值,切换元素的 display CSS 属性

<div id="app">
    <h1 v-show="false">v-show的显示和隐藏</h1>
    <h1 v-if="isIf">v-if的显示和隐藏</h1>
</div>


<script>
    let vm = new Vue({
        el:"#app",
        data:{
            isIf:true,
            msg:"请输入用户名"
        }
    })

</script>
  1. v-model双向绑定数据
<input type="text" v-model="msg"/>   {{msg}} <!--取数据-->

6.v-for循环

v-for语法 : item in arr
参数: arr: 要遍历的数组
	  item : 数组里的每一个元素
      in: 特殊的语法
<div id="app">
    <ul>
        <li v-for="(item,i) in arr">
            <span>{{i+1}}</span>
            <span>{{item.name}}</span>
            <span>{{item.age}}</span>
            <span>{{item.sex}}</span>
        </li>
    </ul>
</div>


<script>
    let vm = new Vue({
        el:'#app',
        data:{
            arr:[
                {name:'xiaoming', age :18, sex: "男"},
                {name:'xiaoming', age :18, sex: "男"},
                {name:'xiaoming', age :18, sex: "男"}
            ]
        }
    })
</script>

7.v-bind绑定属性

<div id="app">
    <!--绑定属性-->
    <img v-bind:src="imgSrc" alt="">
    <!--简写-->
    <img :src="imgSrc" alt="">

    <!--class绑定 : 绑定的是字符串的类名-->
    <h2 :class="'red'">class绑定</h2>
    <h2 :class="['red', 'pink']">class绑定</h2>
    <h2 :class="red">不写引号class绑定,去vm实例中找</h2>

    <h2 :class="{red : flag, pink:true}">以对象的方式去写,通过布尔值判定,key是style里面的类名</h2>

    <!--三元表达式: 当flag为true,就有red样式, 否则有pink样式-->
    <h2 :class="[flag?red:pink]">三元表达式</h2>

</div>


<script>
    let vm = new Vue({
        el:'#app',
        data:{
            imgSrc:'1.png',
            red:'red',
            flag:true
        }
    })
</script>

8.v-on添加事件

<div id="app">
    <button v-on:click="num++">点击+1</button>
    <h1>{{num}}</h1>

    <!--简写  小括号没有参数, 可以省略-->
    <button @click="fn('hello')">点我弹框</button>
    <h1>{{fn()}}</h1>

    <!--点击切换颜色-->
    <button @click="change" :class="{red: flag}">点击切换颜色</button>
</div>

<script>
    let vm = new Vue({
        el:'#app',
        data:{
            num:0,
            flag: true
        },
        //在methods定义方法
        methods:{
            fn:function (sayHi) {
                //console.log(sayHi)
                return 11;
            },
            change: function () {
                 //此时的this是实例对象
                 console.log(this.flag)
                this.flag = !this.flag;
            }
        }
    })
</script>

9.v-class 类名
v-style 与v-class用法大致一样 这个我就不写了

  <style>
          .red {
 
              background: red;
          }

          .blue {
              width: 100px;
              height: 100px;
             background: blue;
         }
 
     </style>
 
 
 <div id="box">
     <div style="width: 100px;height: 100px;" v-bind:class='{red:isred}'></div>
     <!--<div style="width: 100px;height: 100px;" v-bind:class='isred?"red":"blue"'></div>-->    <!--三元运算符方式-->
     <!--<div style="width: 100px;height: 100px;" v-bind:class='[{red:"isred"}]'></div>-->
 
 </div>
 
 <script>
     new Vue({
        el: "#box",
         data(){
             return {
                 isred:false
             }
         }
     })
 </script>

10.v-pre 把标签内部的元素原位输出

<div id="box">
    <div v-pre>欢迎--{{msg}}</div>
</div>
 
 
 
<script>
    new Vue({
        el:"#box",
        data(){
            return{
                msg:"111111"
            }
        }
    })
</script>

二、事件修饰符
7. .stop 阻止自身的冒泡事件

<div id="app">
    <!--   .stop     阻止自身的冒泡事件-->
	    <div @click="divClick">
	        <button @click.stop="btnClick">点击</button>
	    </div>
  </div>


<script>
    var vm = new Vue({
        el:'#app',
        data:{},
        methods:{
            divClick :function () {console.log("触发了div的点击事件")},
            btnClick :function () {console.log("触发了btn的点击事件")}      
        }
    })
</script>

  1. .prevent 阻止默认事件
<div id="app">
  <!--.prevent    阻止默认事件-->
    <a href="http://www.baidu.com" @click.prevent="linkClick">百度一下</a>
</div>

<script>
    var vm = new Vue({
        el:'#app',
        data:{},
        methods:{
            linkClick :function () {console.log("触发了a的点击事件")}
        }
    })
</script>
  1. .capture 添加事件侦听器时使用事件捕获模式 : 用捕获的模式来触发
<div id="app">
  <!--.capture    添加事件侦听器时使用事件捕获模式 : 用捕获的模式来触发-->
    <div @click.capture="divClick">
        <button @click="btnClick">点击
            <span @click="linkClick">里面的事件</span>
        </button>
    </div>
 </div>

<script>
    var vm = new Vue({
        el:'#app',
        data:{},
        methods:{
            divClick :function () {console.log("触发了div的点击事件")},
            btnClick :function () {console.log("触发了btn的点击事件")},
            linkClick :function () {console.log("触发了a的点击事件")}
        }
    })
</script>
  1. .self : 阻止自己身上的冒泡行为
<div id="app">
  <!--.self : 阻止自己身上的冒泡行为-->
    <div @click.self="divClick">
        <button @click="btnClick">点击
            <span @click="linkClick">里面的事件</span>
        </button>
    </div>
</div>

<script>
    var vm = new Vue({
        el:'#app',
        data:{},
        methods:{
            divClick :function () {console.log("触发了div的点击事件")},
            btnClick :function () {console.log("触发了btn的点击事件")},
            linkClick :function () {console.log("触发了a的点击事件")}
        }
    })
</script>
  1. .once 事件只触发一次
<div id="app">
<!--.once       事件只触发一次-->
    <a href="http://www.baidu.com" @click.prevent.once="linkClick">百度一下</a>
</div>

<script>
    var vm = new Vue({
        el:'#app',
        data:{},
        methods:{      
            linkClick :function () {console.log("触发了a的点击事件")}
        }
    })
</script>
<think>我们正在讨论Vue事件修饰符事件修饰符Vue为v-on指令提供的特殊后缀,用于处理DOM事件细节。 常用事件修饰符包括: .stop - 调用 event.stopPropagation(),阻止事件冒泡 .prevent - 调用 event.preventDefault(),阻止默认行为 .capture - 添加事件侦听器时使用 capture 模式(即事件捕获阶段处理) .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调(即事件源是自身才触发) .once - 只触发一次回调 .passive - 以 { passive: true } 模式添加侦听器,提升移动端性能(尤其滚动性能) 此外,还有按键修饰符(如 .enter, .tab, .delete, .esc, .space, .up, .down, .left, .right)系统修饰键(如 .ctrl, .alt, .shift, .meta)等。 下面我们将详细说明这些事件修饰符的用法场景。</think>### Vue 常用事件修饰符详解 事件修饰符Vue 为 `v-on` 指令提供的特殊后缀,用于简化常见 DOM 事件处理逻辑。以下是核心修饰符及其应用场景: --- #### **基础事件修饰符** 1. **`.stop`** - 阻止事件冒泡 ```html <button @click.stop="handleClick">点击不会向上冒泡</button> ``` 2. **`.prevent`** - 阻止默认行为 ```html <form @submit.prevent="onSubmit">阻止表单默认提交</form> ``` 3. **`.capture`** - 使用捕获模式(从外向内触发) ```html <div @click.capture="outer">外层先触发</div> ``` 4. **`.self`** - 仅当事件源是元素自身时触发(忽略子元素冒泡) ```html <div @click.self="onlySelf">子元素点击不会触发</div> ``` 5. **`.once`** - 事件只触发一次 ```html <button @click.once="oneTime">仅生效一次</button> ``` 6. **`.passive`** - 提升滚动性能(不阻塞主线程) ```html <div @scroll.passive="onScroll">移动端优化</div> ``` --- #### **按键修饰符** 7. **系统按键** ```html <!-- 组合键 --> <input @keyup.ctrl.enter="submit"> <!-- 精确按键 --> <input @keyup.exact.esc="close"> ``` 8. **常用按键别名** | 修饰符 | 对应按键 | |--------------|----------------------| | `.enter` | Enter 回车键 | | `.tab` | Tab 键 | | `.delete` | Delete / Backspace | | `.esc` | Esc 键 | | `.space` | 空格键 | | `.up`/`.down`| 上下方向键 | --- #### **鼠标修饰符** 9. **鼠标按键限定** ```html <div @click.middle="middleClick">中键点击</div> <div @click.right.prevent>禁用右键菜单</div> <!-- 其他:.left, .right, .middle --> ``` --- ### 修饰符链式调用 可串联使用多个修饰符: ```html <!-- 阻止冒泡 + 阻止默认行为 + 只触发一次 --> <a @click.stop.prevent.once="doSomething">链接</a> ``` --- ### 性能与场景对比 | 修饰符 | 典型场景 | 注意事项 | |--------------|--------------------------|--------------------------| | `.passive` | 移动端滚动事件 | 不能与 `.prevent` 共用 | | `.exact` | 精确控制系统修饰键组合 | 需 Vue 2.5+ | | `.once` | 一次性操作(如表单提交) | 解绑后不影响手动触发 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值