Javascript 如何在Vue.js中的插槽内使用模板标记?
我有一个模板,包括一些HTML和一些Javascript 如何在Vue.js中的插槽内使用模板标记?,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我有一个模板,包括一些HTML和一些脚本标记。我想在我的vue组件中使用它作为模板,稍后我会将其放入DOM中,我希望它按原样放置,因此也会执行脚本标记 我希望将模板保留在组件标记内,并使用插槽 e、 g 这就是内容 log(“只要有人把我放在DOM中,我就想被执行!”); 但问题是Vue删除了模板和脚本标记,然后替换了插槽标记 到目前为止,我拼命尝试但没有成功: 将模板放在另一个模板中-模板就消失了 用模板包裹插槽——模板就消失了 使用-这是一个巨大的失败 从$slots获取插槽-它是一个
脚本标记。我想在我的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不会强制一个行为超过另一个行为,但仍然可以使用ameis=“script”
技巧
<template>
</template>
<script>
props: ['script'],
created() {
eval(this.script)
}
</script>