vuejs:vue3

v0.0.1Published 3 years ago

vuejs:vue3

Installation

meteor add vuejs:vue3

Basic usage

Start a subscription (with static parameters):

1import { subscribe } from 'meteor/vuejs:vue3'
2
3export default {
4  setup () {
5    const { ready, stop } = subscribe('links.all' /*, 'some', 'params', 'here' */)
6
7    watch(ready, value => {
8      console.log('loading:', !value)
9    })
10  }
11}

Star a subscription (with reactive parameters):

1import { ref } from 'vue'
2import { autoSubscribe } from 'meteor/vuejs:vue3'
3
4export default {
5  setup () {
6    const filter = ref('meow')
7
8    autoSubscribe(() => ['links.some', filter.value])
9  }
10}

Use Tracker:

1import { autorun } from 'meteor/vuejs:vue3'
2// Import some collection
3import { Links } from '/imports/api/links/links.js'
4
5export default {
6  setup () {
7    const { result: links, stop } = autorun(() => Links.find({}))
8
9    return {
10      links,
11    }
12  }
13}

If you don't plan on manually controlling the autorun, you can use autoResult instead which only returns the result:

1import { autoResult } from 'meteor/vuejs:vue3'
2// Import some collection
3import { Links } from '/imports/api/links/links.js'
4
5export default {
6  setup () {
7    const links = autoResult(() => Links.find({}))
8
9    return {
10      links,
11    }
12  }
13}

Full example:

<script setup>
import { Links } from '/imports/api/links/links.js'
import { subscribe, autoSubscribe, autoResult } from 'meteor/vuejs:vue3'

const { ready } = subscribe('links.all')
// const { ready } = autoSubscribe(() => ['links.all'])

const links = autoResult(() => Links.find({}))

function submit (form) {
  const title = form.title
  const url = form.url

  Meteor.call('links.insert', title.value, url.value, (error) => {
    if (error) {
      alert(error.error)
    } else {
      title.value = ''
      url.value = ''
    }
  })
}
</script>

<template>
  <h2>Learn Meteor!</h2>
  <ul>
    <li>
      <form @submit.prevent="submit($event.target)">
        <input type="text" name="title" placeholder="Title" required>
        <input type="url" name="url" placeholder="Url" required>
        <input type="submit" name="submit" value="Add new link">
      </form>
    </li>

    <div v-if="!ready">Loading...</div>

    <li v-for="link of links" :key="link._id">
      <a :href="link.url" target="_blank">{{ link.title }}</a>
    </li>
  </ul>
</template>