Javascript 如何在Vue.js中的插槽内使用模板标记?

Javascript 如何在Vue.js中的插槽内使用模板标记?,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我有一个模板,包括一些HTML和一些脚本标记。我想在我的vue组件中使用它作为模板,稍后我会将其放入DOM中,我希望它按原样放置,因此也会执行脚本标记 我希望将模板保留在组件标记内,并使用插槽 e、 g 这就是内容 log(“只要有人把我放在DOM中,我就想被执行!”); 但问题是Vue删除了模板和脚本标记,然后替换了插槽标记 到目前为止,我拼命尝试但没有成功: 将模板放在另一个模板中-模板就消失了 用模板包裹插槽——模板就消失了 使用-这是一个巨大的失败 从$slots获取插槽-它是一个

我有一个模板,包括一些HTML和一些
脚本
标记。我想在我的vue组件中使用它作为模板,稍后我会将其放入DOM中,我希望它按原样放置,因此也会执行脚本标记

我希望将模板保留在组件标记内,并使用
插槽

e、 g


这就是内容

log(“只要有人把我放在DOM中,我就想被执行!”);
但问题是Vue删除了
模板
脚本
标记,然后替换了
插槽
标记

到目前为止,我拼命尝试但没有成功:

  • 将模板放在另一个模板中-模板就消失了
  • 用模板包裹
    插槽
    ——模板就消失了
  • 使用
    -这是一个巨大的失败
  • $slots
    获取插槽-它是一个没有模板/脚本标记的VNode
最大的问题是前端不知道
模板
标记中的html是什么样子的。它只是一些在服务器上呈现的html,一些不可变的遗留代码必须按原样插入页面才能工作


当然,我可以将模板标记放在组件外部,然后以另一种方式获取它,但我希望将其放在组件内部,以保持其整洁和优雅。

Vue不是这样工作的<代码>
标记不属于
中,并且由于某种原因被省略。如果您希望在页面加载时执行某些操作,请使用coresponding

要执行服务器生成的JS代码,请使用
eval()

Parent.vue

<template>
  <child script="console.log('something')"></child>
</template>

Child.vue

<template>

</template>

<script>
  props: ['script'],
  created() {
    eval(this.script)
  }
</script>

道具:[“脚本”],
创建(){
eval(this.script)
}

虽然Vue在自己的编译中使用模板标记,但您仍然可以使用

var-app=新的Vue({
el:“#应用程序”,
模板:`
无模板:
测试
更多代码(检查页面源代码)

是模板: 测试 更多代码(检查页面源代码)

是脚本: console.log(“Scrpt测试”); 更多代码(检查控制台)

`, 数据:{} })


模板标签应该消失,这就是它们存在的全部原因。它们是一个可以挂起vue规则的地方,而无需在DOM中插入额外的节点。@DanielBeck您肯定有一点,但模板标记不是vue特定的,因此完全删除它们感觉有点极端。vue就是这样做的,假设您使用的是Vue,那么您不会试图在其上使用单独的模板系统。@xpy您可以强制将
标记呈现为其他内容,而不是像
那样消失。我的目的不是在某个时候执行某些脚本。更清楚地说,我希望通过vue能够附加和执行在服务器上构建的任意脚本标记,而前端完全忽略它的用途、功能和内容。使用
eval()
可以做到这一点。我在回答中添加了一个例子。这与评论中提到的@Archie几乎相同。遗憾的是,
脚本
标记也被条带化:(@xpy脚本标记的问题是它们的意思不清楚,如果要执行一次,请将脚本放在主体中,但是如果应该在每次加载组件时执行脚本,请使用eval加载,当包含脚本标记时,Vue不会强制一个行为超过另一个行为,但仍然可以使用ame
is=“script”
技巧
<template>

</template>

<script>
  props: ['script'],
  created() {
    eval(this.script)
  }
</script>