3 回答
TA贡献1794条经验 获得超8个赞
简单的答案是否定的,渲染函数/模板需要根元素。您可以使用<div>
内联元素(例如 a)<span>
或使用 css 属性设置 div 的display: inline
样式来解决此问题,而不是使用 a。
TA贡献1155条经验 获得超0个赞
我通过将 css 样式属性传递给父 vue 组件的模板,使用解决方法解决了我最初的意图:
<template>
<div>
<span v-for="(line, index) in paragraph.lines" :key="index">
<p v-if="line.length">
<span v-for="(lineFragment, index) in line" :key="index">
<component class="inline-component" :element="lineFragment" :is="lineFragment.type"/>
</span>
</p>
</span>
</div>
</template>
<script>
import { Component, Prop } from 'vue-property-decorator'
import ElementHook from '@/views/ElementHook.vue'
@Component
export default class ParagraphWrapper extends ElementHook {
@Prop() element!: ParagraphElement
}
</script>
<style scoped>
.inline-component {
display: inline;
}
</style>
ElementHook 组件作为一个基本的抽象类,它导入所有可以通过 `:is="lineFragment.type" 显示的子组件(例如 TextWrapper 组件的“text”)。
如果想要确保段落仍然围绕父容器对象的边框,您需要考虑添加white-space: pre-wrap;到 SFC 底部定义的 css 类。
TA贡献1836条经验 获得超4个赞
Vue 组件模板应该具有 DOM 中存在的根元素。通常使用div
或包装元素。span
这很少是一个问题,因为可以设置根元素的样式以适应布局。
vue-fragment插件提供了React.Fragment
Vue 中的功能。它基本上是在安装时解开根元素。由于它是一种黑客攻击,因此它可能无法在所有情况下都按预期工作。
渲染函数可用于通过_v
内部方法渲染文本节点。它使用未记录的 API 表明它也是一种黑客攻击。
- 3 回答
- 0 关注
- 111 浏览
添加回答
举报