【发布时间】:2019-07-08 10:03:40
【问题描述】:
我有一个包含一些 HTML 和一些 script 标记的模板。我想在我的 vue 组件中使用它作为模板,稍后我将把它放入 DOM 中,我希望它按原样放置,所以我的脚本标签也会被执行。
我想将模板保留在组件标签内并使用slot。
例如
<amazing-component>
<template>
<p>This is the content</p>
<script>
console.log("I want to be executed as long as someone puts me in the DOM!");
</script>
</template>
</amazing-component>
<script type="text/x-template" id="component-template">
<slot></slot>
</script>
但问题是Vue删除了template和script标签,然后替换了slot标签。
到目前为止我拼命尝试但没有奏效:
- 将模板放在另一个模板中 - 模板就消失了。
- 用模板包裹
slot- 模板就消失了。 - 使用
<script type="text/x-template" >- 这是一个史诗般的失败。 - 从
$slots获取槽 - 这是一个没有模板/脚本标签的 VNode。
最大的问题是前端不知道template标签里面的html是什么样子的。它只是在服务器上呈现的一些 html,一些必须按原样插入页面才能工作的不可变遗留代码。
当然,我可以将模板标签放在组件外部并以另一种方式获取它,但我希望将它放在组件内部以使其更加整洁和优雅。
【问题讨论】:
-
模板标签应该消失,这就是它们存在的全部原因。它们是你可以挂起 vue 规则的地方,而无需在 DOM 中插入额外的节点。
-
@DanielBeck 你肯定有一个观点,但模板标签不是 vue 特定的,所以完全删除它们感觉有点极端。
-
这就是 Vue 的做法,大概是希望如果您使用 Vue,您不会同时尝试在其之上使用单独的模板系统。
-
@xpy 您可以强制
<template>标签呈现为其他内容,而不是使用<template is="div">消失。
标签: javascript vue.js vuejs2