vue-feathers-hotload
Automatically load/reload data from feathers services to vue components. Load queries are live and reactive. Feathers client must be configured with feathers-reactive.
Install
npm i -S vue-feathers-hotload
Usage
In entry js:
appuse ... app // must use and setup all client-side services before Vue.use(VueFeathersHotload) Vue
In Vue components:
{ return a: ... b: ... } { return { // item would be an object containing the loaded data return service: 'feathersServiceName' idField: 'id' // id field name for this services. '_id' by default { return // the id of of the item. Can use this.a/b to make the id. Reactively reload when this.a/b changes } { // do something when loaded/reloaded } { // do something when laoding is failed } }, { // list would be an array containing the returned data, with proper list.length/total/limit/skip properties. The list is an object too, and items can be accessed via `list[id]` return service: 'feathersServiceName' idField: 'id' // id field name for this services. '_id' by default { return // your live query here. Can use this.a/b in query. Reactively reload when this.a/b changes // $limit, $skip, $sort, $select, $in, $lt ... all supported and watched for live query } object: true // make { // do something when loaded/reloaded } { // do something when laoding is failed } } }
A more detailed example in coffee (I always tell you coffee is neat):
: -> id: 'xxxxxxx' # for item id below sort: 1 # or -1, for $sort below limit: 10 # for $limit below : -> : -> service: 'xxx' idField: 'id' : -> thisid # will reload when this.id changes : ... : ... : -> service: 'xxx' idField: 'id' : -> someField: someValue $select: 'field1''field2'... $sort: field1: thissort # will reload when this.sort changes $limit: thislimit # will reload when this.limit changes : consolelog result : consolelog error
Then this.item
, this.list
, this.list.total/limit/skip/length
can be used in your Vue component.
Bonus: reading/writing flags for cached services
If you are using feathers-cache, any cached services have extra flags to show if the services are reading from or writing to the remote server. And the bonus is, once vue-feathers-hotload
is used, these reading/writing flags become reactive and can be directly used in vue component. For example:
import cache from 'feathers-cache'appuse 'cachedServiceName'cache ... # define your client-side cached service appsetup # initialize services import Vue from 'vue'import VueFeathersHotload from 'vue-feathers-hotload'Vueuse VueFeathersHotloadapp
Now you can do this in your vue component's <script>
:
computed: # the three are identical : -> this$feathersservicescachedServiceName : -> this$servicescachedServiceName : -> this$feathersservicecachedServiceName
And in your component's <template>
:
{{myService1.loading}}...