Computed свойства в Quasar, как и в чистом Vue.js, представляют собой вычисляемые значения, которые автоматически пересчитываются при изменении зависимых данных. Они позволяют создавать производные состояния, избегая избыточного кода и повторных вычислений.
Особенности:
{{ computedValue }} или через директивы
v-bind.Пример использования:
<template>
<q-input v-model="firstName" label="Имя"/>
<q-input v-model="lastName" label="Фамилия"/>
<div>Полное имя: {{ fullName }}</div>
</template>
<script>
export default {
data() {
return {
firstName: '',
lastName: ''
};
},
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
};
</script>
В данном примере fullName пересчитывается автоматически
при изменении firstName или lastName. Это
уменьшает вероятность ошибок и исключает необходимость ручного
обновления поля полного имени.
Getter и Setter для computed:
Computed свойства могут иметь как только getter, так и setter, что позволяет использовать их для двусторонней привязки данных.
computed: {
fullName: {
get() {
return `${this.firstName} ${this.lastName}`;
},
set(value) {
const parts = value.split(' ');
this.firstName = parts[0];
this.lastName = parts[1] || '';
}
}
}
Setter позволяет изменять исходные данные через computed свойство, что удобно при работе с формами и динамическими интерфейсами Quasar.
Watchers используются для отслеживания изменений данных и выполнения побочных эффектов. В отличие от computed свойств, watchers не кэшируются и предназначены для реактивного реагирования на изменения.
Примеры применения:
Пример использования:
<script>
export default {
data() {
return {
searchQuery: ''
};
},
watch: {
searchQuery(newValue, oldValue) {
this.fetchResults(newValue);
}
},
methods: {
fetchResults(query) {
// запрос к API или фильтрация данных
console.log('Поиск по запросу:', query);
}
}
};
</script>
В данном примере при каждом изменении searchQuery
автоматически вызывается метод fetchResults, позволяя
реализовать динамический поиск.
Опции watchers:
deep: true — позволяет отслеживать вложенные изменения
объектов или массивов.immediate: true — вызывает watcher сразу после
инициализации компонента.watch: {
user: {
handler(newVal) {
console.log('Пользователь изменился', newVal);
},
deep: true,
immediate: true
}
}
Deep watchers особенно полезны при работе со сложными структурами данных, например, при редактировании объектов в Quasar Data Table или форм с вложенными полями.
| Характеристика | Computed | Watch |
|---|---|---|
| Пересчет | Автоматический, кэшируемый | Не кэшируется, всегда вызывается |
| Использование | Для отображения и производных данных | Для побочных эффектов и реакций |
| Getter/Setter | Да | Нет |
| Подходит для | Форм, таблиц, UI вычислений | Запросов к API, валидации, асинхронных операций |
Практическая рекомендация:
Computed свойства и watchers активно применяются с компонентами Quasar, такими как:
QInput и QSelect — для
двусторонней привязки данных и вычисления отображаемых значений.QTable — для динамической фильтрации,
сортировки и подсчета агрегатов через computed свойства.QDialog и QPopupProxy —
watchers позволяют автоматически реагировать на открытие или закрытие
диалогов, обновляя данные или состояния приложения.Пример динамического подсчета выбранных строк в таблице:
computed: {
selectedCount() {
return this.selectedRows.length;
}
},
watch: {
selectedRows(newSelection) {
console.log('Выбрано строк:', newSelection.length);
}
}
Использование этих инструментов позволяет создавать интерфейсы Quasar с высокой степенью интерактивности и отзывчивости, сохраняя код чистым и структурированным.