Package Exports
- vue-fragment
- vue-fragment/dist/vue-fragment.esm.js
- vue-fragment/dist/vue-fragment.min.js
- vue-fragment/src/component
- vue-fragment/src/component.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (vue-fragment) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
vue-fragment 
what
a very candide fragment component for Vue.js
why
If you arrived here, I think you searched hard and you know why you're here.
For others, fragments are basically root-less components. They come useful in many situations where you don't want to pollute the DOM with a useless container, or you want to return many elements at once.
how
It's impossible to use functional components or slots, since Vue.js vDOM diffing has a "you should return one root element" limitation… Instead, I'm using an (internal) directive which will dump all the children of the fragment root node in its place. Since directives can manipulate DOM, we can act after rendering and bypass Vue limitation.
The component is called Fragment
so you won't have to change much code when Vue3 native fragments arrive. That said, I'm not a core developer of Vue.js, and I don't have any view of their implementation. I only know what fragments are and how they should work, and did my best to reproduce it ; so it should be fine.
use
- download the package
npm i -s vue-fragment
From here, you can:
Plugin:
import Fragment from 'vue-fragment' Vue.use(Fragment.Plugin) // or import { Plugin } from 'vue-fragment' Vue.use(Plugin) // … export const MyComponent { template: ' <fragment> <input type="text" v-model="message"> <span>{{ message }}</span> </fragment> ', data() { return { message: 'hello world }} }
Component:
import { Fragment } from 'vue-fragment' export const MyComponent { components: { Fragment }, template: ' <fragment> <input type="text" v-model="message"> <span>{{ message }}</span> </fragment> ', data() { return { message: 'hello world }} }