Cash — это лёгкая библиотека, обеспечивающая функциональность, схожую с jQuery, но с минимальным размером. Для интеграции с Vue достаточно подключить её через npm:
npm install cash-dom
После установки импорт можно выполнить в любом компоненте Vue:
import $ from 'cash-dom';
Важно понимать, что Cash работает напрямую с DOM, а Vue управляет виртуальным DOM. Следует использовать Cash только после того, как компоненты смонтированы, чтобы избежать несоответствий между виртуальным и реальным DOM.
export default {
mounted() {
$('.btn').on('click', () => {
console.log('Кнопка нажата');
});
}
}
Cash предоставляет знакомый интерфейс для выбора элементов и выполнения действий с ними:
$('.selector') — выбор элементов по CSS-селектору..addClass('class') / .removeClass('class')
— работа с классами..css('property', 'value') — изменение стилей..attr('name', 'value') — работа с атрибутами..html() / .text() — доступ к содержимому
элементов.Пример динамического изменения стиля после события Vue:
export default {
mounted() {
$('#change-color').on('click', () => {
$('.box').css('background-color', 'lightblue');
});
}
}
Cash облегчает работу с событиями в Vue, когда требуется манипуляция с DOM вне реактивной системы:
.on('event', handler) — добавление обработчика..off('event') — удаление обработчика..trigger('event') — программный вызов события.Для динамических элементов важно использовать делегирование:
$(document).on('click', '.dynamic-btn', function() {
console.log('Динамическая кнопка нажата');
});
Cash поддерживает базовые анимации:
.fadeIn(duration) /
.fadeOut(duration).slideUp(duration) /
.slideDown(duration).toggleClass('class', duration) — анимированное
переключение классаПример анимации при клике:
export default {
mounted() {
$('#toggle-box').on('click', () => {
$('.box').fadeToggle(500);
});
}
}
Прямое манипулирование DOM через Cash может конфликтовать с реактивной системой Vue. Для корректной работы:
mounted или
updated.v-if, v-for или :class.export default {
data() {
return {
visible: false
};
},
mounted() {
this.$watch('visible', (newVal) => {
if (newVal) {
$('.box').fadeIn(300);
} else {
$('.box').fadeOut(300);
}
});
}
}
Cash поддерживает упрощённые AJAX-вызовы через метод
$.ajax:
$.ajax({
url: '/api/data',
method: 'GET',
success: (response) => {
console.log(response);
},
error: (err) => {
console.error(err);
}
});
Важно учитывать, что Vue имеет собственные способы работы с HTTP
(через fetch или axios), поэтому использование
Cash для AJAX оправдано только при необходимости лёгкой интеграции с
существующим кодом.
export default {
mounted() {
$('#add-item').on('click', () => {
const newItem = $('<li>').text('Новый элемент');
$('#list').append(newItem);
});
}
}
export default {
mounted() {
$('#submit-btn').on('click', (e) => {
e.preventDefault();
const formData = $('#my-form').serializeArray();
console.log(formData);
});
}
}
export default {
mounted() {
$('#container').on('click', '.child-btn', function() {
$(this).toggleClass('active');
});
}
}
*.Использование Cash с Vue позволяет сочетать удобный синтаксис работы с DOM и богатую реактивность Vue, сохраняя при этом лёгкость и компактность кода.