Vue.js 教程

Vue.js 模板语法(插值)

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。

在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

插入文本

数据绑定最常见的形式就是使用 “Mustache” 语法 (双大括号 {{...}}) 的文本插值,例如:

<span>Message: {{ msg }}</span>

Mustache 标签(即 {{ msg }})将会被替换为对应数据对象上 msg 属性的值。无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会更新。

通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。注意:这会影响到该节点上的其它数据绑定:

<span v-once>这个将不会改变: {{ msg }}</span>

完整代码:

示例:

<div id="app">
    <span v-once>{{message}}</span>
</div>

<script type="text/javascript">
    var app = new Vue({
        el: "#app",
        data: {
            message: "Hello Vue"
        }
    });
</script>

👉自己动手试一试 »

运行效果图:

插入原始 HTML

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令,例如:

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

这个 span 的内容将会被替换成为 rawHtml 属性的值,直接作为 HTML —— 会忽略解析属性值中的数据绑定。你不能使用 v-html 来复合局部模板,因为 Vue 不是基于字符串的模板引擎。反之,对于用户界面 (UI),组件更适合作为可重用和可组合的基本单位。

注意:动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS(跨站脚本攻击)攻击。请只对可信内容使用 HTML  插值,绝不要对用户提供的内容使用插值。

完整代码:

示例:

<div id="app">
    <p>Using mustaches: {{ rawHtml }}</p>
    <p>Using v-html directive: <span v-html="rawHtml"></span></p>
</div>

<script type="text/javascript">
    var app = new Vue({
        el: "#app",
        data: {
            rawHtml: "<strong>Hello Vue</strong>"
        }
    });
</script>

👉自己动手试一试 »

运行效果图:

插入属性

Mustache 语法不能作用在 HTML 属性上,遇到这种情况应该使用 v-bind 指令,例如:

<div v-bind:id="dynamicId"></div>

对于布尔属性 (它们只要存在就意味着值为 true),v-bind 工作起来略有不同,在这个例子中:

<button v-bind:disabled="isButtonDisabled">Button</button>

如果 isButtonDisabled 的值是 null、undefined 或 false,则 disabled 属性甚至不会被包含在渲染出来的 <button> 元素中。

完整示例:

示例:

<div id="app">
    <div v-bind:id="dynamicId"></div>
    <button v-bind:disabled="isButtonDisabled1">Button1</button>
    <button v-bind:disabled="isButtonDisabled2">Button2</button>
</div>

<script type="text/javascript">
    var app = new Vue({
        el: "#app",
        data: {
            dynamicId: "myId",
            isButtonDisabled1: true,
            isButtonDisabled2: undefined
        }
    });
</script>

👉自己动手试一试 »

运行效果图:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号