Tiny component to render Vue.js vNodes in the template.
<v :nodes="vnodes" />
- π© Render vNodes without converting your component to use a render function!
- π₯ Declarative API render multiple vNodes anywhere in your template!
- π₯ Tiny
250 B
minzipped!
npm i vue-v
<template>
<div>
<v :nodes="$slot.default" />
</div>
</template>
<script>
import V from 'vue-v';
export default {
components: {
V
}
};
</script>
When you have vNodes that you want to render in a specific part of your template without having to use a render function.
For example, you might want to render just the text from the default <slot />
:
<template>
<div>
<!-- Only render the text from <slot /> -->
<v :nodes="textNodes()" />
</div>
</template>
<script>
import V from 'vue-v';
export default {
components: {
V
},
methods: {
// Can't use computed property because slots aren't reactive
textNodes() {
return (this.$slots.default || []).filter(vnode => !vnode.tag);
}
}
};
</script>
You can use vNode Syringe to overwrite attributes, props, and event-listeners.
For example, if you want to overwrite the class, and add a click
handler:
<template>
<div>
<vnode-syringe
class!="overwrite-class"
@click="onClick"
>
<v :nodes="vnodes" />
</vnode-syringe>
</div>
</template>
<script>
import V from 'vue-v';
import vnodeSyringe from 'vue-vnode-syringe';
export default {
components: {
V,
vnodeSyringe
},
...,
methods: {
onClick() {
...
}
}
};
</script>
- vue-proxi - π Tiny proxy component
- vue-subslot - π Pick 'n choose what you want from a slot passed into your Vue component
- vue-pseudo-window - πΌ Declaratively interface window/document in your Vue template
- vue-vnode-syringe - π§¬Mutate your vNodes with vNode Syringe π
- vue-frag - π€² Directive to return multiple root elements