美文网首页
2020-12-29

2020-12-29

作者: 二荣xxx | 来源:发表于2020-12-30 00:08 被阅读0次

    Vue修饰符和事件

    Vue修饰符:用来修饰事件的操作
    例如:

    @click.stop='add'  //阻止默认事件冒泡,并执行add方法
    @click.prevent='add'//阻止默认事件,并执行add方法
    @click.stop.prevent='add'//t同时阻止默认动作和冒泡,并执行add方法
    

    代码举例:阻止默认动作

    new Vue({
        template: `
        <div>
            <a @click.prevent="add" href='https://www.baidu.com/'>百度</a>
        </div>
        `,
        methods: {
            add() {
                console.log('hi')
            }
        }
    }).$mount('#apple')
    

    1、v-on和其他支持的修饰符(挑重点)

    • v-on.{keycode | keyAlias}
    • v-on.stop.prevent
    • v-bind.prop
    • v-bind.camel
    • v-bind.sync
    • v-model.lazy
    • v-model.number
    • v-model.trim

    2、input输入事件

    new Vue({
        template: `
        <div>
            <input @keypress="y" /> //键盘事件
        </div>
        `,
        methods: {
            y(e) {
              if (e.keyCode === 13)
                    console.log('用户打了回车')
            //走如果e.keyCode=13,则往下执行的逻辑
            }
        }
    }).$mount('#apple')
    

    等价于

    new Vue({
        template: `
        <div>
            <input @keypress.13="y" /> //键盘事件,按回车(13),就执行y方法
        </div>
          //走用户点击e.keyCode=13往下执行y的逻辑
        `,
        methods: {
            y(e) {
                console.log('用户打了回车')
            }
        }
    }).$mount('#apple')
    

    由于按键码不好记,Vue提供了案件码的别名,例:

    • .enter -----13
    • .tab
    • .delete
    • .space
    • up | down | left | right (上下左右)

    3、.Sync(同步)修饰符

    Vue规则:组件不能修改props外部数据

    this.$emit可以触发事件并传参

    $event可以获取¥emit的参数

    Sync修饰符官方文档,.sync 修饰符是作为一个编译时的语法糖存在。它会被扩展为一个自动更新父组件属性的 v-on 监听器。

    例如

    <Child :money.sync="total" />
    

    会被扩展为

    <Child :money="total" v-on:update:money="total = $event" /> 
     <!-- 尤雨溪将$emit后的值获取到了$evnet上 'update:money'事件名一个字符串-->
    

    当子组件需要更新money时,会显式触发一个更新事件

        <button @click="$emit('update:money', money - 100)">
    <!--vue内置了eventBus,当前实例继承了eventBus,可以$emit触发一个事件,更新money并放到$event上-->
    

    举个真实例子

    <template>
      <div class="app1">
        {{ `我现在有${total}` }}
        <hr />
        <!-- <Child :money="total" v-on:update:money="total = $event" /> -->
        <Child :money.sync="total" />
        <!-- 尤雨溪将$emit后的值获取到了$evnet上 'update:money'事件名一个字符串-->
      </div>
    </template>
    <script>
    import Child from "./child.vue";
    export default {
      components: { Child },
      data() {
        return {
          total: 10000,
        };
      },
    };
    </script>
    
    <style  scoped>
    .app1 {
      border: 3px solid red;
      padding: 10px;
    }
    </style>
    
    <template>
      <div class="child">
        {{ money }}
        <button @click="$emit('update:money', money - 100)">
          <!--vue内置了eventBus,当前实例继承了eventBus,可以$emit触发一个事件-->
          <span>花钱</span>
        </button>
      </div>
    </template>
    
    <script>
    export default {
      props: ["money"],
    };
    </script>
    
    <style scoped>
    .child {
      border: 1px solid red;
      padding: 4px;
    }
    </style>
    

    相关文章

      网友评论

          本文标题:2020-12-29

          本文链接:https://www.haomeiwen.com/subject/lmvqoktx.html