跳至内容

内联模板属性
重大变更

概述

inline-template 特性 的支持已被移除。

2.x 语法

在 2.x 中,Vue 在子组件上提供了 inline-template 属性,以使用其内部内容作为其模板,而不是将其视为分发内容。

html
<my-component inline-template>
  <div>
    <p>These are compiled as the component's own template.</p>
    <p>Not parent's transclusion content.</p>
  </div>
</my-component>

3.x 语法

此特性将不再受支持。

迁移策略

大多数 inline-template 的用例假设没有构建工具的设置,其中所有模板都直接写入 HTML 页面中。

迁移构建标志:COMPILER_INLINE_TEMPLATE

选项 #1:使用 <script> 标签

在这种情况下,最直接的解决方法是使用带有备用类型的 <script>

html
<script type="text/html" id="my-comp-template">
  <div>{{ hello }}</div>
</script>

在组件中,使用选择器定位模板

js
const MyComp = {
  template: '#my-comp-template'
  // ...
}

这不需要任何构建设置,在所有浏览器中都能正常工作,不受任何 DOM 内 HTML 解析注意事项的影响(例如,您可以使用驼峰式 prop 名称),并在大多数 IDE 中提供适当的语法高亮显示。在传统的服务器端框架中,这些模板可以拆分为服务器端模板片段(包含在主 HTML 模板中),以提高可维护性。

选项 #2:默认插槽

以前使用 inline-template 的组件也可以使用默认插槽进行重构 - 这使数据作用域更加明确,同时保留了内联编写子内容的便利性

html
<!-- 2.x Syntax -->
<my-comp inline-template :msg="parentMsg">
  {{ msg }} {{ childState }}
</my-comp>

<!-- Default Slot Version -->
<my-comp v-slot="{ childState }">
  {{ parentMsg }} {{ childState }}
</my-comp>

子组件,而不是提供没有模板,现在应该渲染默认插槽*

html
<!--
  in child template, render default slot while passing
  in necessary private state of child.
-->
<template>
  <slot :childState="childState" />
</template>
  • 注意:在 3.x 中,插槽可以作为根使用原生 片段 支持渲染!