模板动态参数和指令修饰符

一:模板动态参数

    
默认写法:
<div @click="onceFun()">once只触发一次回调</div>
<div :title="hoverTitle">title动态参数</div>
动态参数写法:
<div @[event]="onceFun()">click动态参数</div>
// data 中定义  event:'click'

<div :[hoverEve]="hoverTitle">title动态参数</div>
// data 中定义  hoverEve:'title'

二:指令修饰符

  • v-on   绑定事件监听器, 事件类型由参数指定
    • 缩写 @
    • 修饰符
      • .left 点击鼠标左键时触发
      • .right 点击鼠标右键时触发
      • .middle 点击鼠标中键时触发
      • .once 只触发一次的回调
      • .self 只当事件是从侦听器绑定的元素本身触发时才触发回调
      • .stop 调用event.stopPropagation() 阻止事件冒泡
      • .prevent 调用event.preventDefault()  阻止默认事件
      • .capture 添加事件侦听器时使用capture模式
      • .{keyAlias} 仅当事件是从特定键触发时才触发回调
  • v-bind 绑定属性
    • 缩写 :
  • v-model 用在表单组件或者组件上的数据双向绑定
    • 修饰符
      • .lazy 监听change而不是input事件
      • .number 输入字符串转为有效的数字
      • .trim 输入首尾空格过滤
<h2>指令缩写 及 修饰符</h2>
            <h3>v-on</h3>
            <!-- v-on 缩写是@ -->
            <div v-on:click="arr.push('牛奶')">点击数组增加</div>
            <div @click="arr.push('包子')">点击数组增加</div>
            <!-- v-on 修饰符 -->
            <div>
                <span v-for="item in arr" :key="item.id">{
    
    {item}}</span>
            </div>
            <!-- .left 点击鼠标左键时触发 -->
            <div @click.left="arr.push('左键')">点击鼠标左键触发</div>
            <!-- .right 点击鼠标右键时触发 -->
            <div @click.right="arr.push('右键')">点击鼠标右键触发</div>
            <!-- .middle 点击鼠标中键时触发 -->
            <div @click.middle="arr.push('中键')">点击鼠标中键触发</div>
            <!-- .once 点击回调,只触发一次 -->
            <div @click.once="onceFun()">once只触发一次回调</div>
            <!-- .{keyAlias} 仅当事件是从特定键触发时才触发回调 -->
            <button @click.A="rFun">11</button>
            <input type="text"  @click.9="rFun">
            <!-- 由于事件冒泡,点击button后btnclick和divclick事件都会触发 -->
            <div @click="divClick">
                点击<button type="button" @click="btnClick">按钮1</button>
            </div>
            <!-- .stop 调用event.stopPropagation() 阻止事件冒泡 -->
            <div @click="divClick">
                点击
                <button type="button" @click.stop="btnClick">.stop按钮1</button>
            </div>
            <!-- .self 只当事件是从侦听器绑定的元素本身触发时才触发回调 -->
            <div @click.self="divClick">
                点击
                <button type="button" @click="btnClick">.self按钮1</button>
            </div>
            <!-- .prevent调用event.preventDefault():阻止默认事件 -->
            <form action="https://www.baidu.com/">
                <input type="submit" value="prevent提交" @click.prevent="subClick"/>
            </form>
            <!-- .{keyAlias} 仅当事件是从特定键触发时才触发回调  监听某个按键(回车)的点击 -->
            <input type="text" @keyup.enter="keyUpFun"/>


            <h3>v-bind</h3>
            <!-- v-bind 缩写是: -->
            <div v-bind:title="hoverTitle">v-bind</div>
            <div :title="hoverTitle">v-bind</div>


            <h3>v-model</h3>
            <!-- v-model修饰符 -->
            <!-- .lazy 监听change而不是input事件 v-model 是每次修改都会绑定值,添加了 lazy 就只会在回车后或者失去焦点后绑定 -->
            <input type="text" v-model.lazy="message" @change="messFun()">
            <!-- .number 默认以 string 类型保存在 data 中,通过 number 修饰符可以以 number 类型存入 data 中 -->
            <!-- input 的类型为 number 只能输入数字,如果没有修饰符,保存到 data 中仍然是 string 类型 -->
            <input type="number" v-model.number='message'/>
            <!-- .trim 去除字符串两边的空字符 -->
            <input type="text" v-model.trim='message'/>
        onceFun(){
            alert('22')
        },
        rFun(){
            alert('RRR')
        },
        divClick(){
            alert('11====点击了divClick')
        },
        btnClick(){
            alert('22====点击了btnClick')
        },
        subClick(){
            alert(1)
        },
        keyUpFun(){
            alert('KEYup')
        },

        messFun(){
            console.log(this.message)
        },

三:.self 和 .stop的区别 以及.capture

.stop 阻止事件冒泡 不阻止冒泡的话,先冒里面的元素,再冒外面的元素
.self 只会阻止自己身上冒泡行为的触发,并不会真正阻止冒泡行为
.capture 事件捕捉。事件捕捉:在事件冒泡发生时,我们只想让某个div执行他的事件
注意:如果我们在div2上使用.capture,在div3上使用.stop,点击div3的区域会发现先执行div2的事件在执行div3的事件,
也就是可以理解为 .capture的优先级>.stop
 <!-- ===================================================================================== -->
            <h2>.stop和.self的区别 以及.capture</h2>
            <!-- 注:.stop 阻止冒泡,不阻止冒泡的话:先冒里面的那个元素,再冒外面的元素 -->
            <div class="outer" @click="div2Handler">
                <div class="inner" @click="div1Handler">
                    <input type="button" value="戳他" @click.stop="btnHandler">
                </div>
            </div> 
        
            <!-- .self 只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为 -->
            <div class="outer" @click="div2Handler">
                <div class="inner" @click.self="div1Handler">
                    <input type="button" value="戳他" @click="btnHandler">
                </div>
            </div> 
            
            <!-- .self 事件捕捉:在事件冒泡发生时,我们只想让某个div执行他的事件 -->
            <div class="outer" @click="div2Handler">
                <div class="inner" @click.capture="div1Handler">
                    <input type="button" value="戳他" @click.stop="btnHandler">
                </div>
            </div> 
// .stop和.self的区别
        div1Handler() {
          alert('这是触发了 inner div 的点击事件')
        },
        btnHandler() {
          alert('这是触发了 btn 按钮 的点击事件')
        },
        linkClick() {
         alert('触发了连接的点击事件')
        },
        div2Handler() {
          alert('这是触发了 outer div 的点击事件')
        },

おすすめ

転載: blog.csdn.net/yangdl6/article/details/119453566