Tiny component to render Vue.js vNodes in the template.
For example, you might want to render just the text from the default
For example, if you want to overwrite the class, and add a
<v :nodes="vnodes" />
πββοΈ Why?
- π© Render vNodes without converting your component to use a render function!
- π₯ Declarative API render multiple vNodes anywhere in your template!
- π₯ Tiny
250 B
minzipped!
π Install
npm i vue-v
π¨π»βπ« Basic usage
<template>
<div>
<v :nodes="$slot.default" />
</div>
</template>
<script>
import V from 'vue-v';
export default {
components: {
V
}
};
</script>
πββοΈ FAQ
When would I use this?
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>
How can I add a class, attribute, or event handler to the vNodes?
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>
π¨βπ©βπ§ Related
- 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