gpt4 book ai didi

javascript - Vue 如何使用渲染函数回退到默认渲染?

转载 作者:行者123 更新时间:2023-11-30 10:58:22 25 4
gpt4 key购买 nike

看看这个简单的 hello world html 页面

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<title>Hello World</title>
</head>

<body>
<div id="app">
Message is {{ message }}
</div>
<script>
new Vue({
el: "#app",
data: {
message: "Hello World!"
}
})
</script>
</body>

</html>

当用作静态页面时,它将显示 Message is Hello World!页面上的文本。如果我添加 render Vue 声明的函数

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<title>Hello World</title>
</head>

<body>
<div id="app">
Message is {{ message }}
</div>
<script>
new Vue({
el: "#app",
data: {
message: "Hello World!"
},
render: function (h) {
return h("p", "Rendered " + this.message);
}
})
</script>
</body>

</html>

它将显示Rendered Hello World!<p> 里面元素,删除 <div> 中存在的任何内容元素。现在我的问题是,如果我想让渲染函数在特定条件下执行默认渲染怎么办,即。显示 Message is Hello World!文本?有点像

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<title>Hello World</title>
</head>

<body>
<div id="app">
Message is {{ message }}
</div>
<script>
new Vue({
el: "#app",
data: {
message: "Hello World!"
},
render: function (h) {
if (this.message === "Hello World!") {
/* do something to make the render function fallback to default rendering? */
} else {
return h("p", "Rendered " + this.message);
}
}
})
</script>
</body>

</html>

我知道我可以用不同的方式实现这种效果,我只是想知道是否可以告诉 Vue 在渲染函数中恢复到默认的回退渲染机制,还是不?

====== 编辑 ======

只是为了澄清一些,我不是寻找这样的解决方案

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<title>Hello World</title>
</head>

<body>
<div id="app">
Message is {{ message }}
</div>
<script>
new Vue({
el: "#app",
data: {
message: "Hello World!"
},
render: function (h) {
if (this.message === "Hello World!") {
return h("p", "Message is " + this.message);
} else {
return h("p", "Rendered " + this.message);
}
}
})
</script>
</body>

</html>

我想知道是否可以以某种方式停止渲染函数而不返回任何渲染内容,并使 Vue 显示默认渲染,就像根本没有声明渲染函数一样。

最佳答案

您可以自己编译模板字符串。它可以通过实例属性 $el.innerHTML 访问。然后你可以调用 Vue.compile 来编译模板字符串。

关于编译的更多信息:https://v2.vuejs.org/v2/api/#Vue-compile

有些想法是这样的:

if (this.message === 'Hello World!') {
return Vue.compile(this.$el.outerHTML).render.call(this, h)
/* do something to make the render function fallback to default rendering? */
}

关于javascript - Vue 如何使用渲染函数回退到默认渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com