Компоненты внутри <svg>
должны нормально работать, но вам нужно переименовать legend
во что-то другое. legend
- это стандартное имя элемента HTML, поэтому Vue запутается.
Также убедитесь, что вы правильно зарегистрировали компонент, локально или глобально. Обычно Vue предупредит вас, если вы забыли зарегистрировать компонент, но в этом случае этого не произойдет, потому что legend
является стандартным элементом HTML.
Вот полный пример, аналогичный один в вопросе:
const myLegend = {
template: `<circle r="10" cx="20" cy="20" :fill="color" />`,
props: ['color']
}
new Vue({
el: '#graphbox',
components: {
myLegend
},
data () {
return {
outerheight: 50,
outerwidth: 50,
color: '#ff0000'
}
}
})
<script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>
<div id="graphbox">
<svg :width="outerwidth" :height="outerheight">
<my-legend :color="color"></my-legend>
</svg>
</div>