【发布时间】:2019-05-06 23:25:43
【问题描述】:
我正在为 Nuxt 解决这个问题
WIP 的代码沙箱不起作用:https://codesandbox.io/s/zw26v3940m
好的,所以我将 WordPress 作为 CMS,它正在输出一堆 HTML。 HTML 示例如下所示:
'<h2>A heading tag</h2>
<site-banner image="{}" id="123">Slot text here</site-banner>
<p>some text</p>'
请注意,它包含一个 Vue 组件 <site-banner>,上面有一些道具(image 道具是一个 JSON 对象,我为了简洁而省略了)。该组件已全局注册。
我有一个我们编写的组件,名为<wp-content>,它在 Vue 中运行良好,但在 Nuxt 中无法运行。注意这两个渲染函数,一个用于 Vue,另一个用于 Nuxt(显然这是为了举例,我不会同时使用)。
export default {
props: {
html: {
type: String,
default: ""
}
},
render(h, context) {
// Worked great in Vue
return h({ template: this.html })
}
render(createElement, context) {
// Kind of works in Nuxt, but doesn't render Vue components at all
return createElement("div", { domProps: { innerHTML: this.html } })
}
}
所以最后一个渲染函数在 Nuxt 中有效,只是它不会真正渲染 this.html 中的 Vue 组件,它只是将它们作为 HTML 放在页面上。
那么我如何在 Nuxt 中做到这一点?我想从服务器获取一串 HTML,并将其呈现在页面上,并将任何已注册的 Vue 组件转换为适当的成熟 Vue 组件。基本上是一个小小的“VueifyThis(html)”工厂。
【问题讨论】:
-
我的一个想法是尝试将 HTML“字符串”转换为 JSX 模板(基本上通过从字符串中删除“)。但我不确定这是否可能,我不能想办法。
-
那个在 Vue 中有效的函数,在 nuxt 中不有效吗?
-
@acdcjunior 不,它不在 Nuxt 2.6.3 中
-
您是否将
nuxt.render添加到您的应用变量中? -
@jalil 不,我没有,那是什么以及如何?