vuejs常用修饰符

一、常用修饰符

1.1 表单修饰符

修饰符作用使用
lazy填完信息,光标离开标签的时候,才会将值赋予给value<input type="text" v-model.lazy="value">
trim自动过滤用户输入的首空格字符,中间的空格不会过滤<input type="text" v-model.trim="value">
number自动将用户输入的值转为数值类型,如果不能被parseFloat解析,会返回原来的值<input v-model.number="age" type="number">

1.2 事件修饰符

修饰符作用使用
stop阻止了事件冒泡 ,相当于调用了event.stopPropagation<div @click="shout(2)"> <button @click.stop="shout(1)">ok</button> </div>// 只输出1
prevent阻止了事件的默认行为,相当于调用了event.preventDefault方法<form v-on:submit.prevent="onSubmit"></form>
once绑定了事件以后只能触发一次,第二次就不会触发<button @click.once="shout(1)">ok</button>

1.3 鼠标按钮修饰符

修饰符作用使用
left左键点击<button @click.left="shout(1)">ok</button>
right右键点击<button @click.right="shout(1)">ok</button>
middle中键点击<button @click.middle="shout(1)">ok</button>

1.4 键盘修饰符

键盘修饰符用来修饰键盘事件(onkeyup,onkeydown)的,有如下:

  • 普通键(enter、tab、delete、space、esc、up…)
  • 系统修饰键(ctrl、alt、meta、shift)
<!-- 只有按键为keyCode的时候才触发 -->
<input type="text" @keyup.keyCode="shout()">

还可以通过以下方式自定义一些全局的键盘码别名

<!-- Vue.config.keyCodes.f5 = 116; -->
<!--预先定义了keycode 116(即F5)的别名为f5,因此在文字输入框中按下F5,会触发prompt方法-->
<input type="text" @keydown.f2="prompt()">

1.5 v-bind修饰符

修饰符作用使用
sync实现子组件props的双向绑定<BT :age.sync="age"></BT>
prop设置自定义标签属性,避免暴露数据,防止污染HTML结构<input id="uid" title="title1" value="1" :index.prop="index">
camel将命名变为驼峰命名法,如将 view-Box属性名转换为 viewBox

二、.sync

2.1 背景

日常开发时,我们总会遇到需要父子组件双向绑定的问题,但是考虑到组件的可维护性,vue中是不允许子组件改变父组件传的props值的。那么同时,vue中也提供了一种解决方案.sync修饰符。

2.2 .sync修饰符之前的写法

  • 父组件
    <BT :age="age" @update:age="$event => age = $event"></BT>
    
  • 子组件
    this.$emit('update:age', 20)
    

子组件使用$emit('update:xxx', newVal)向父组件发送事件,注意这里的事件名称update:xxx是一种约定的写法,使用其它事件名称是同样的效果。

2.3 使用.sync修饰符的写法

为了方便这种写法,vue提供了.sync修饰符,说白了就是一种简写的方式,我们可以将其当作是一种语法糖sync2.3版本引入,作为一个事件绑定 语法糖

  • 父组件
    <BT :age.sync="age"></BT>
    
  • 子组件
    this.$emit('update:age', 20)
    

三、.native

有时候,会想在某个自定义组件上监听一个原生事件,就像这样:

<BT @click="click()"></BT>

此时click事件并不起作用,需要借助.native修饰符:

<BT @click.native="click()"></BT>

需要注意的是给普通HTML标签监听一个事件,之后添加 .native 修饰符是不会起作用的。例如:

<a @click.native="click()">a</a>

甚至会报错:

[Vue warn]: The .native modifier for v-on is only valid on components but it was used on <a>.

四、.prop

  • .prop的修饰符用来指定绑定的值不应该被props解析,而应该作为dom属性绑定在元素上。
    <template>
      <div>
        <p>AT</p>
        <BT :age.prop="20"></BT>
        <BT :age="20"></BT>
      </div>
    </template>
    
    <script>
    import BT from "./BT.vue";
    
    export default {
      name: "AT",
      components: { BT },
      data() {
        return {};
      },
      methods: {},
    };
    </script>
    
    <template>
      <div>
        <p>BT</p>
        <p>{{ age }}</p>
      </div>
    </template>
    
    <script>
    export default {
      name: "BT",
      props: {
        age: {
          type: Number,
          default: 18,
        },
      },
      data() {
        return {};
      },
      mounted() {},
      methods: {},
    };
    </script>
    
    结果:
    AT
    BT
    18
    BT
    20
    

参考

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值