# Локальное состояние
# data
Тип:
Function
Подробности:
Функция, которая возвращает объект данных для экземпляра компонента. Не рекомендуется отслеживать в
data
объекты со своим собственным поведением, например, объекты API браузера или свойства прототипа. Лучше представлять данные компонента в виде простого плоского объекта.После инициализации системы реактивности больше не будет возможности добавлять реактивные свойства к корневому объекту
data
. Поэтому рекомендуется объявить все необходимые свойства корневого уровня перед созданием экземпляра.После создания экземпляра доступ к оригинальном объекту с данными можно получить через
vm.$data
. Экземпляр компонента проксирует все свойства в объекте данных, поэтому обращение кvm.a
будет аналогичноvm.$data.a
.Свойства, чьи имена начинаются с символа
_
или$
, не будут проксироваться экземпляром компонента, так как могут конфликтовать с внутренними свойствами Vue и методами API. Доступ к ним можно получить черезvm.$data._property
.Пример:
// Создание экземпляра напрямую const data = { a: 1 } // Объект добавляется к экземпляру компонента const vm = createApp({ data() { return data } }).mount('#app') console.log(vm.a) // => 1
1
2
3
4
5
6
7
8
9
10
11Обратите внимание, если в свойстве
data
использовать стрелочную функцию, тоthis
не будет указывать на экземпляр компонента. Доступ к нему в таких случаях можно получить через первый аргумент функции:data: vm => ({ a: vm.myProp })
1
2
3См. также: Подробнее о реактивности
# props
Тип:
Array<string> | Object
Подробности:
Список/хэш атрибутов, которые могут принимать данные от родительского компонента. Может использоваться массив (простой синтаксис) или объект (альтернативный синтаксис). Объект позволяет указывать расширенные настройки: устанавливать проверку типа, пользовательскую валидацию или значение по умолчанию.
При использовании объектного синтаксиса доступны опции:
type
: может быть одним из нативных конструкторов:String
,Number
,Boolean
,Array
,Object
,Date
,Function
,Symbol
, или любой функцией пользовательского конструктора, или массивом из вышеперечисленных вариантов. Проверяет, что входной параметр имеет заданный тип, и выбрасывает предупреждение, если тип не соответствует заданному. Подробнее в разделе указания типа входных параметров.default
:any
Определяет значение по умолчанию для входного параметра. Если входной параметр не был передан, то будет использовано это значение. Объект или массив в значении по умолчанию необходимо возвращать из функции-фабрики.required
:Boolean
Определяет, является ли входной параметр обязательным. В окружениях кроме production будет выводиться предупреждение в консоли, если значение истинно, но входной параметр не передавался.validator
:Function
Пользовательская функция валидации, которая получает значение входного параметра единственным аргументом. В окружениях кроме production будет выводиться предупреждение в консоли, если вернётся значение, приводимое к false (т.е. когда валидация не пройдена). Подробнее в разделе валидации входных параметров.
Пример:
const app = createApp({}) // синтаксис с массивом app.component('props-demo-simple', { props: ['size', 'myMessage'] }) // объектный синтаксис с валидацией app.component('props-demo-advanced', { props: { // проверка типа height: Number, // проверка типа + другие валидации age: { type: Number, default: 0, required: true, validator: value => { return value >= 0 } } } })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23См. также: Входные параметры
# computed
Тип:
{ [key: string]: Function | { get: Function, set: Function } }
Подробности:
Вычисляемые свойства, которые будут добавлены в экземпляр компонента. Все геттеры и сеттеры имеют свой контекст
this
, который автоматически привязывается к экземпляру компонента.Обратите внимание, что при использовании стрелочной функции для вычисляемого свойства
this
не будет указывать на экземпляр компонента. Доступ к нему в таких случаях можно получить через первый аргумент функции:computed: { aDouble: vm => vm.a * 2 }
1
2
3Вычисляемые свойства кэшируются и пересчитываются только при изменении своих реактивных зависимостей. Обратите внимание, если какая-либо зависимость находится за пределами области видимости экземпляра (т.е. не является реактивной), то в таком случае вычисляемое свойство обновляться не будет.
Пример:
const app = createApp({ data() { return { a: 1 } }, computed: { // только для чтения aDouble() { return this.a * 2 }, // с геттером и сеттером aPlus: { get() { return this.a + 1 }, set(v) { this.a = v - 1 } } } }) const vm = app.mount('#app') console.log(vm.aPlus) // => 2 vm.aPlus = 3 console.log(vm.a) // => 2 console.log(vm.aDouble) // => 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27См. также: Вычисляемые свойства
# methods
Тип:
{ [key: string]: Function }
Подробности:
Методы, которые будут добавлены в экземпляр компонента. К ним можно получить доступ через экземпляр или использовать их в выражениях директив. Все методы имеют свой контекст
this
, который автоматически привязывается к экземпляру компонента.Примечание
Не используйте стрелочные функции при определении методов (например,
plus: () => this.a++
). Стрелочные функции связываются с родительским контекстом, поэтомуthis
не будет указывать на экземпляр компонента иthis.a
окажется неопределённым.Пример:
const app = createApp({ data() { return { a: 1 } }, methods: { plus() { this.a++ } } }) const vm = app.mount('#app') vm.plus() console.log(vm.a) // => 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15См. также: Обработка событий
# watch
Тип:
{ [key: string]: string | Function | Object | Array }
Подробности:
Объект, где ключами будут реактивные свойства для отслеживания — к примеру, свойства data или вычисляемые свойства — а значениями соответствующие коллбэки для вызова. Значение может быть строкой с именем метода или объектом с дополнительными опциями. Экземпляр компонента будет вызывать
$watch()
для каждой записи в объекте при инициализации. Подробнее о дополнительных опцияхdeep
,immediate
иflush
в разделе $watch.Пример:
const app = createApp({ data() { return { a: 1, b: 2, c: { d: 4 }, e: 5, f: 6 } }, watch: { // отслеживание свойства верхнего уровня a(val, oldVal) { console.log(`новое значение: ${val}, старое: ${oldVal}`) }, // строка с именем метода b: 'someMethod', // коллбэк будет вызываться каждый раз, когда изменится любое из свойств // наблюдаемого объекта, независимо от глубины вложенности c: { handler(val, oldVal) { console.log('изменилось свойство c') }, deep: true }, // отслеживание одного вложенного свойства объекта 'c.d': function (val, oldVal) { // do something }, // коллбэк будет вызван сразу после начала наблюдения e: { handler(val, oldVal) { console.log('изменилось свойство e') }, immediate: true }, // передача массива коллбэков; они будут вызываться один за другим f: [ 'handle1', function handle2(val, oldVal) { console.log('вызван handle2') }, { handler: function handle3(val, oldVal) { console.log('вызван handle3') } /* ... */ } ] }, methods: { someMethod() { console.log('изменилось свойство b') }, handle1() { console.log('вызван handle1') } } }) const vm = app.mount('#app') vm.a = 3 // => новое значение: 3, старое: 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65Примечание
Не используйте стрелочные функции при объявлении методов-наблюдателей (например,
searchQuery: newValue => this.updateAutocomplete(newValue)
). Стрелочные функции связываются с родительским контекстом, поэтомуthis
не будет указывать на экземпляр компонента иthis.updateAutocomplete
окажется неопределённым.См. также: Методы-наблюдатели
# emits
Тип:
Array<string> | Object
Подробности:
Список/хэш пользовательских событий, которые могут генерироваться в компоненте. Может использоваться массив (простой синтаксис) или объект (альтернативный синтаксис). Объект позволяет определить валидацию для событий.
При использовании объектного синтаксиса значением каждого свойства может быть
null
или функция валидации. Функция может получить дополнительные аргументы, которые будут переданы вызову$emit
. Например, дляthis.$emit('foo', 1)
соответствующая функция валидации дляfoo
получит аргументом значение1
. Функция должна возвращать булево значение, чтобы указать корректность передаваемых с событием аргументов.Использование:
const app = createApp({}) // Использование массива (простой синтаксис) app.component('todo-item', { emits: ['check'], created() { this.$emit('check') } }) // Использование объекта (альтернативный синтаксис) app.component('reply-form', { emits: { // без валидации click: null, // с валидацией submit: payload => { if (payload.email && payload.password) { return true } else { console.warn('Некорректные данные для события submit!') return false } } } })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Примечание
События, перечисленные в опции
emits
, не будут наследоваться корневым элементом компонента и будут исключены из свойства$attrs
.См. также: Наследование атрибутов
# expose 3.2+
Тип:
Array<string>
Подробности:
Список свойств, которые объявлены для публичного экземпляра компонента.
По умолчанию, публичный экземпляр, который доступен через
$refs
,$parent
или$root
совпадает с внутренним экземпляром компонента, используемым шаблоном. Опцияexpose
ограничивает список свойств, к которым можно получить доступ через публичный экземпляр.Свойства, объявленные самим Vue, такие как
$el
или$parent
, будут всегда доступны в публичном экземпляре, их указывать не нужно.Использование:
export default { // increment будет объявлен для использования снаружи, // но count будет доступен только внутри expose: ['increment'], data() { return { count: 0 } }, methods: { increment() { this.count++ } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17См. также: defineExpose
← Глобальное API DOM →