You can attach non-responsive properties to component instances directly in the mounted()
hook:
<script> export default { // tooltip: null, mounted() { // this.$options.tooltip = new Tooltip(...) this.tooltip = new Tooltip(...) }, } </script> <template> <!-- BEFORE --> <i @mouseover="hover = true; $options.tooltip.show();" @mouseleave="hover = false; $options.tooltip.hide();" @click="$options.tooltip.hide();" ref="icon" /> <!-- AFTER --> <i @mouseover="hover = true; tooltip.show();" @mouseleave="hover = false; tooltip.hide();" @click="tooltip.hide();" ref="icon" /> </template>