Vue.js - это простой в использовании фреймворк для веб-приложений, который мы можем использовать для разработки интерактивных интерфейсных приложений.

В этой статье мы рассмотрим, как различными способами связывать данные и автоматически изменять входные данные.

Привязки значений

v-model связывают значения обычно как статические строки или логические значения для флажка.

Например, для флажка мы можем привязать его к строке следующим образом:

src/index.js :

new Vue({
  el: "#app",
  data: {
    selected: undefined
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      foo
      <input type="radio" v-model="selected" value="foo" />
      <br />
      bar
      <input type="radio" v-model="selected" value="bar" />
      <br />
      <span>Selected: {{ selected }}</span>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

Флажки привязаны к логическому значению:

<input type="checkbox" v-model="toggle">

Select привязываются к выбранной строке, установленной в атрибуте value:

<select v-model="selected">   
  <option value="foo">Foo</option> 
</select>

Флажок

Мы можем изменить истинное и ложное значение флажка с помощью атрибутов true-value и false-value следующим образом:

src/index.js :

new Vue({
  el: "#app",
  data: {
    selected: undefined
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      Toggle
      <input
        type="checkbox"
        v-model="selected"
        true-value="yes"
        false-value="no"
      />
      <br />
      <span>Selected: {{ selected }}</span>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

Тогда мы получим yes, когда поставим флажок, и no в противном случае.

true-value и false-value не влияют на входной атрибут value, потому что браузеры не содержат снятые флажки при отправке форм.

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

Радио-кнопки

Мы можем привязать атрибут value к выбранному значению с помощью v-bind:value.

Например, мы можем написать следующее:

src/index.js :

new Vue({
  el: "#app",
  data: {
    pick: "",
    foo: "foo",
    bar: "bar"
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      Foo
      <input type="radio" v-model="pick" v-bind:value="foo" />
      <br />
      Bar
      <input type="radio" v-model="pick" v-bind:value="bar" />
      <br />
      <p>Selected: {{ pick }}</p>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

Затем v-bind:value=”foo” отображается как value='foo', а v-bind:value=”bar” отображается как value='bar'.

Когда мы выбираем значение, мы получаем foo или bar в зависимости от того, какой переключатель выбран.

Выберите параметры

Мы можем привязать значение к объекту следующим образом:

src/index.js :

new Vue({
  el: "#app",
  data: {
    selected: undefined
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <select v-model="selected">
        <option v-bind:value="{ number: 123 }">123</option>
        <option v-bind:value="{ number: 456 }">456</option>
      </select>
      <br />
      <p>Selected: {{ selected }}</p>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

Затем мы получаем { number: 123 } или { number: 456 }, в зависимости от того, что выбрано.

Если мы хотим отобразить значение свойства number, мы должны написать следующее:

src/index.js :

new Vue({
  el: "#app",
  data: {
    selected: {}
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <select v-model="selected">
        <option v-bind:value="{ number: 123 }">123</option>
        <option v-bind:value="{ number: 456 }">456</option>
      </select>
      <br />
      <p>Selected: {{ selected.number }}</p>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

Поскольку установка начального значения undefined приведет к ошибке и приложение не запустится.

Модификаторы

Vue поставляется с несколькими модификаторами для v-model.

.ленивый

Мы можем использовать v-model.lazy для синхронизации данных о change событиях, а не о input событиях. Это означает, что изменения синхронизируются только тогда, когда ввод не в фокусе.

Например, мы можем использовать его следующим образом:

src/index.js :

new Vue({
  el: "#app",
  data: {
    msg: ""
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <input v-model.lazy="msg" />
      <br />
      <p>Value: {{ msg }}</p>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

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

.количество

Модификатор number преобразует введенное в число. Это полезно, потому что ввод с type='number' по-прежнему возвращает строку.

Например, мы можем использовать его следующим образом:

src/index.js :

new Vue({
  el: "#app",
  data: {
    age: 0
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <input v-model.number="age" type="number" />
      <br />
      <p>Age: {{ age }}</p>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

.отделка

Мы можем автоматически обрезать пробелы с помощью модификатора .trim. Чтобы использовать его, мы можем написать следующее:

src/index.js :

new Vue({
  el: "#app",
  data: {
    msg: ""
  }
});

index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>App</title>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <input v-model.trim="msg" type="text" />
      <br />
      <p>Value: "{{ msg }}"</p>
    </div>
    <script src="src/index.js"></script>
  </body>
</html>

Затем, когда мы вводим что-то с пробелами в начале и в конце, они не отображаются.

So:

" a b c "

станет "a b c".

Заключение

Мы можем динамически привязываться к значениям с атрибутом v-bind:value. Это позволяет нам связывать атрибуты значений с примитивными значениями и объектами.

Кроме того, мы можем использовать различные модификаторы на v-model, чтобы автоматически изменять входное значение различными способами, например обрезать входные данные и преобразовывать их в числа.