Дата последнего изменения: 23.09.2022
В рамках поставки модуля ui есть расширение ui.dexie, позволяющее удобно взаимодействовать с локальной базой данных IndexedDB.
Начиная с версии ui 22.500.0 Вы можете воспользоваться встроенной интеграцией Dexie с Vue 3.
Подробнее о библиотеке читайте на официальном сайте.
Для начала работы подключите расширения ui.dexie и ui.vue3 в Вашем экстеншне или на php-странице.
В расширение импортируйте liveQuery из ui.dexie и useObservable из ui.vue3.
Для работы в рамках страницы и в скриптах без транспиляции используйте неймспейсы BX.Dexie3 и BX.Vue3 для доступа к функциям (например, для liveQuery это BX.Dexie3.liveQuery).
В примере ниже Vue приложение отображает содержимое локальной базы данных.
В переменной items будут реактивно храниться все элементы таблицы items, в которых имя начинается на английскую букву "A".
import {BitrixVue, useObservable} from 'ui.vue3';
import {Dexie, liveQuery} from 'ui.dexie';
const db = new Dexie("vuedbsample");
db.version(1).stores({
items: "++id, name"
});
const DBItems = {
data() {
return {
db,
items: useObservable(
liveQuery(() => db.items.where("name").startsWithAnyOf("A", "a").sortBy('id'))
),
}
},
methods: {
addUser()
{
const name = prompt('Specify the element starting with the letter "A":')
this.db.items.add({ name });
},
clear()
{
this.db.items.clear();
}
},
template: `
<h2>Dexie integration (IndexedDB)</h2>
<!-- Mutation examples -->
<button @click="addUser">Add item</button>
<button @click="clear">Clear items</button>
<!-- Render the result of the query -->
<ul>
<li v-for="item in items" :key="item.id">
{{ item.id }}, {{ item.name }}
</li>
</ul>
`
};
const application = BitrixVue.createApp({
components: {
DBItems
},
template: `
<DBItems/>
`
});
application.mount('#application');