You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中Mustache渲染HTML标题标签失效,求解决方案

解决Vue中HTML标题标签被当作文本渲染的问题

嘿,这个问题我熟!你遇到的核心问题是:Vue的Mustache语法({{}})会自动转义HTML内容——也就是说,你通过计算属性返回的<h1>、<h3>这些标签会被当成普通字符串输出,而不是被浏览器解析成真正的标题元素。所以不管你怎么调整外层的<p>标签或者拆分语法,都没法让标题标签生效。

快速解决方案:使用v-html指令

Vue专门提供了v-html指令来处理包含HTML的内容,它会把绑定的值当作HTML解析并渲染,而不是转义成文本。你只需要把原来的Mustache语法替换成v-html即可:

把这行代码:

<p>Result: {{ sleepyTime }} </p>

改成:

<p>Result: <span v-html="sleepyTime"></span></p>

如果你不需要外层的“Result:”文本,也可以直接用一个容器单独渲染:

<div v-html="sleepyTime"></div>

修改后的完整代码示例

这里是调整好的完整代码,你可以直接复用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>App</title>
</head>
<body>
    <div id="root">
        <input type="text" id="input" v-model="someNumber">
        <p> the value is: {{ someNumber }}</p>
        <button @click="randomNum">random a new number</button>
        <p>Result: <span v-html="sleepyTime"></span> </p>
    </div>
    <script src="https://unpkg.com/vue@2.1.3/dist/vue.js"></script>
    <script>
        new Vue({
            el: "#root",
            data: {
                goToBed: false,
                someNumber: 0
            },
            methods: {
                randomNum() {
                    this.someNumber = Math.random() * 10
                }
            },
            computed: {
                sleepyTime: function () {
                    if (this.someNumber < 5) {
                        return "<h1>It's okay to go back to bed.</h1>"
                    } else if (5 < this.someNumber && this.someNumber < 7) {
                        return "<h3>One more hours plus a cup of coffee</h3>"
                    } else if (7 < this.someNumber && this.someNumber < 9) {
                        return "<h2>2 more hours and 2 cups of coffee.</h2>"
                    } else if (this.someNumber > 9) {
                        return "<h1>Drill 3 cups of coffee. And just stay up.</h1>"
                    }
                }
            }
        });
    </script>
</body>
</html>

补充小提醒

  • v-html只能绑定到单个元素上,不能直接用在根容器上同时渲染多个HTML片段;
  • 如果你的内容来自用户输入,一定要注意XSS风险(做好内容过滤),不过你的场景是自己生成的固定内容,完全不用担心这个问题。

等你太平洋时间23:40回来就能看到效果啦,祝你上班顺利!

内容的提问来源于stack exchange,提问作者Roly Poly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:23:01