内联模板 Attribute

breaking

概览

内联特性 内联模板 Attribute - 图1 (opens new window)的支持已被移除。

2.x 语法

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

  1. <my-component inline-template>
  2. <div>
  3. <p>它们被编译为组件自己的模板</p>
  4. <p>不是父级所包含的内容。</p>
  5. </div>
  6. </my-component>

3.x 语法

将不再支持此功能。

迁移策略

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

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

在这种情况下,最简单的解决方法是将 <script> 与其他类型一起使用:

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

在组件中,使用选择器将模板作为目标:

  1. const MyComp = {
  2. template: '#my-comp-template'
  3. // ...
  4. }

这不需要任何构建设置,可以在所有浏览器中工作,不受任何 DOM HTML 解析警告的约束 (例如,你可以使用 camelCase prop 名称),并且在大多数 ide 中提供了正确的语法高亮显示。在传统的服务器端框架中,可以将这些模板拆分为服务器模板部分 (包括在主 HTML 模板中),以获得更好的可维护性。

选项 #2:默认 Slot

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

  1. <!-- 2.x 语法 -->
  2. <my-comp inline-template :msg="parentMsg">
  3. {{ msg }} {{ childState }}
  4. </my-comp>
  5. <!-- 默认 Slot 版本 -->
  6. <my-comp v-slot="{ childState }">
  7. {{ parentMsg }} {{ childState }}
  8. </my-comp>

子级现在应该渲染默认 slot*,而不是不提供模板:

  1. <!--
  2. 在子模板中,在传递时渲染默认slot
  3. 在必要的private状态下。
  4. -->
  5. <template>
  6. <slot :childState="childState" />
  7. </template>
  • 提示:在 3.x,slot 可以渲染为具有原生 fragments 支持的根目录!