Часто используемые модификаторы Vue, ответ более 5 на собеседовании считается пропуском.

опрос
Часто используемые модификаторы Vue, ответ более 5 на собеседовании считается пропуском.

предисловие

Вы когда-нибудь сталкивались с таким кодом при написании кода?

QQ截图20220102142358.png

Настоящим Сяо Лин отправился изучать его, на самом деле это Вью.修饰符.同时它也是Vue的重要组成成分之一,利用好修饰符可以大大地提高Развивая эффективность, вы также можете减少Много ненужного кода. Далее я разберу 14 модификаторов Vue, которые обычно используются в разработке.

1.lazy

Как подсказывает название,lazyФункция модификатора заключается в том, что связанное lazyValue не изменится при изменении значения поля ввода.Когда курсор покидает поле ввода,v-modelПривязанное значение lazyValue будет только меняться.

01.gif

<!--html-->
<input type="text" v-model.lazy="lazyValue">
<div>{{lazyValue}}</div>
<!--data-->
data() {
    return {
        lazyValue:"100"
    }
  }

2.trim

trimРоль модификатора заключается в том, чтобы поместить начало и конец значения, связанного v-моделью.空格удалять. В реальной разработке мы обычно используем его для модификации содержимого окна поиска.过滤Исключите ситуацию, когда пользователь не может найти контент из-за пробела до и после пользовательского ввода.

02.gif

<input type="text" v-model.trim="trimValue">
<div>{{trimValue}}</div>

data() {
    return {
        trimValue:"100"
    }
  },

3.number

numberРоль модификатора заключается в преобразовании значения в число, но есть два случая: сначала ввести строку, а затем ввести число.

03a.gif

Если вы вводите число первым, берется только часть предыдущего числа.

03b.gif

Если сначала ввести буквы,numberНедопустимый модификатор

Конечно, вы также можетеtype='number'для достижения этой функции.

Конечно, это столкнется с проблемой.Например, когда нам обычно нужно ввести цену, которая контролирует два десятичных знака, возникнет проблема (цена не может быть отрицательной и должна сохранять только два десятичных знака). Сяолин обычно использует следующие методы для достижения:

<!--允许输入小数(两位小数)-->
<input type="text" onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')" > 

4.stop

stopДействие модификатора заключается в предотвращении事件冒泡.

<div class="out-box" @click="clickEvent(2)" >
        触发输出2
        <div class="in-box" @click.stop="clickEvent(1)">触发输出1</div>
 </div>
 
methods: {
    // 点击事件
   clickEvent(num){
       console.log('出发输出:'+num);
   }
  },

04.gif

5.capture

По умолчанию всплывающая подсказка событий всплывает изнутри наружу.captureМодификаторы работают в обратном порядке, захватывая снаружи внутрь.


<div class="out-box" @click.capture="clickEvent(2)" >
        触发输出2
        <div class="in-box" @click="clickEvent(1)">触发输出1</div>
</div>

05.gif

Как вы можете видеть из результатов, всплывающее всплывающее окно события click внутри div полностью изменено. Сначала вывод 2, затем вывод 1.

6.self

Эффект самоможенного модификатора заключается в том, что только сам связывание события Click будет вызвать событие.

<div class="out-box" @click.self="clickEvent(2)" >
    触发输出2
    <div class="in-box" @click="clickEvent(1)">触发输出1</div>
</div>

06.gif

Видно, что срабатывает только 2, а 1 не срабатывает.

7.once

onceЭффект модификатора заключается в том, что событие выполняется только один раз.

<div class="out-box" @click="clickEvent(2)" >
        触发输出2
        <div class="in-box" @click.once="clickEvent(1)">触发输出1</div>
    </div>

07.gif

Как видно из демо, привязкаonceDiv не будет срабатывать снова после запуска события (но все еще всплывает событие).

8.prevent

preventЧто делает модификатор, так это предотвращает события по умолчанию (например, переход метки)

<a href="http://www.w3school.com.cn" @click.prevent="clickEvent(1)">点击A标签</a>

08.gif

Как видите, тег a нажат, а собственное событие перехода не запускается.

9.native

nativeМодификатор добавляется к событию пользовательского компонента, чтобы гарантировать, что событие может быть выполнено.

<!--子组件要是没有emit click事件 就执行不了-->
<Child @click="clickEvent(1)"></Child>
<!--可以执行-->  
<Child @click.native="clickEvent(1)"></Child>

09.gif

можно увидеть неиспользованныйnativeИ компонент, у которого нет события отправки щелчка, не вызывает событие.

10.слева, справа, посередине

.left,.right,.middleЭти три модификатора являются событиями, запускаемыми левой, средней и правой кнопками мыши.

<div class="out-box" @click.left="clickEvent('left')" @click.middle="clickEvent('middle')" @click.right="clickEvent('right')">鼠标各键触发</div>

10.gif

11.sync

Когда родительский компонент передает значение дочернему компоненту, а дочерний компонент хочет изменить это значение (обычно прямая модификация сообщает об ошибке), вы можете сделать это.

xx.png

<Child  :childValue="trimValue" @changeChildValue="value=>trimValue = value"></Child>
<!--child-->
methods: {
   changeChildValue(){
       this.$emit('update:childValue', '子修改过的值')
   }
  },

Эта ситуация более распространена, и метод резки более сложен. Итак, мы рисуем .sync.

<!--父组件-->
<Child  :childValue.sync="trimValue" ></Child>
<!--子组件-->
methods: {
   changeChildValue(){
       this.$emit('update:childValue', '子修改过的值')
   }
  },

11.gif

12.keyCode

Модификация .keyCode в основном используется для запуска событий с ключами. Чаще всего в проекте используется возврат каретки для запуска функции поиска.

 <p>.keyCode</p>
<input type="text" @keyup[keyCode]="clickEvent('keyCode')">

12.gif

keyCode, предоставленный Vue:

//普通键
.enter 
.tab
.delete //(捕获“删除”和“退格”键)
.space
.esc
.up
.down
.left
.right
//系统修饰键
.ctrl
.alt
.meta
.shift

Это также может быть вызвано кодом ключа, конкретным кодом ключа:

c8c26779-9db1-3394-ab6c-36c7f35637ea.jpg

Псевдонимы модификаторов клавиш можно настроить с помощью глобального объекта config.keyCodes:

// 可以使用 `v-on:keyup.f1` 
Vue.config.keyCodes.f1 = 112

13.passive

Модификатор .passive в основном используется для добавления модификатора, подобного .lazy, к событию onscroll. На стороне ПК нет проблем, но на мобильной стороне наши веб-страницы будут зависать. Так что мы собираемся использовать это.

<div @scroll.passive="onScroll">...</div>

14.camel

Поскольку функции HTML нечувствительны к регистру, модификатор .camel позволяет использовать имена атрибутов v-bind в верблюжьем регистре при использовании шаблонов DOM, таких как атрибут SVG viewBox: он фактически будет отображаться как

<svg viewbox="viewbox"></svg>

Это приведет к сбою рендеринга, потому что тег SVG распознает только viewBox, а не то, что такое viewbox.

<!--加了canmel viewBox才会被识别成viewBox--> 
<svg :viewBox.camel="viewBox"></svg>

вопрос

В: Можно ли использовать два модификатора, например click.self.stop?

О: Да

<div class="out-box" @click.stop.prevent="clickEvent(2)" ></div>

может вызвать.stop,.preventдва модификатора.

Эпилог

Эта статья относится к статье брата Сансиня:

13 модификаторов Vue, которые любят задавать интервьюеры

И добавьте собственное понимание и практическую работу.

адрес проекта:GitHub.com/fire небольшой PA…