Я управлял своим состоянием с помощью vuexfire. А пока и для тестирования я привязываюсь к каждому «столу» / узлу в Firebase. Когда данные начинают расти, мне нужно делать запросы, чтобы я не отправлял столько данных клиенту.
Например. Я связываюсь с «таблицей заказов» с помощью db.ref («заказы»), но мне нужно связать заказы только для одного офиса (все заказы для всех офисов находятся в одном узле). Что-то вроде параметра db.ref ('orders'). EqualTo (xx) xx => для выбранного офиса. Возможно ли это?
Возможно, это не проблема, только его заказы с особым статусом, поэтому обработанные заказы будут удалены, но увеличатся при добавлении нового офиса. Например, 1000 заказов (но будет увеличиваться при добавлении нового офиса).
Какой-то код -
В firebaseconfig.js
export const dbOfficeRef = db.ref('office')
In App.vue
export default {
created() {
this.$store.dispatch('setOfficeRef', dbOfficeRef)
}
}
В index.js (store / vuex) и действиях
setOfficeRef: firebaseAction(({ bindFirebaseRef }, { ref }) => {
bindFirebaseRef('office', ref)
})
И у меня есть офисный массив в состоянии.
Выше какое-то расширенное действие от vuexfire. Я не могу передать свой собственный param-объект вместо ref, я все время получаю «undefined» и не могу добраться до своих получателей, чтобы получить параметр для установки. Я хотел бы сделать что-то подобное в действии, привязать к офисному столу для специального кабинета (ключ) -
bindFirebaseRef('office', ref.orderByChild('officeKey').equalTo(key))
--- БОЛЬШЕ КОДА ---
index.js (магазин)
import Vue from 'vue'
import Vuex from 'vuex'
import { firebaseMutations } from 'vuexfire'
import { firebaseAction } from 'vuexfire'
import { dbOfficesRef } from '../firebaseConfig'
Vue.use(Vuex)
export const store = new Vuex.Store({
state: {
offices: []
},
getters: {
getOffices: state => state.offices
},
mutations: {
...firebaseMutations
},
actions: {
setOfficesRef: firebaseAction(({ bindFirebaseRef }, { ref }) => {
bindFirebaseRef('offices', ref)
}),
setOfficesRef2: firebaseAction(({ bindFirebaseRef }, { ref }) => {
bindFirebaseRef('offices', ref.orderByChild('city').equalTo('town1'))
})
}
})
App.vue
<template>
<div id="app">
<div>
<p><button type="button" @click="setOffice2('town1')">Uppdatera</button></p>
<ul>
<li v-for="office in getOffices">
{{ office.city }}
</li>
</ul>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { dbOfficesRef } from './firebaseConfig'
export default {
methods: {
setOffice(city) {
this.$store.dispatch('setOfficesRef', dbOfficesRef.orderByChild('city').equalTo(city))
},
setOffice2(city) {
this.$store.dispatch('setOfficesRef2', dbOfficesRef.orderByChild('city').equalTo(city))
},
computed: {
...mapGetters([
'getOffices'
])
},
created() {
this.$store.dispatch('setOfficesRef', dbOfficesRef)
}
}
</script>
--- FIREBASE ---
offices
office1
city: town1
office2
city: town2