vue5---模板语法----1.插值

mac2025-10-21  6

1. 文本

使用mustache 语法 (双大括号 {{}} )

也可以使用v-once指令执行一次性的插值(只展示一次,当数据发生改变后,不展示改变后的数据)

<h2>{{message}}</h2> <h2 v-once>v-once: {{message}}</h2>

v-once:

后面不需要跟任何表达式表示元素和组件只渲染一次,不会随着数据改变而改变

2. 原始html

mustache语句会将数据解释为普通文本

使用 v-html 指令

某些情况下,从服务器请求到的数据本身是html代码

<div id = "app"> <p>{{url}}</p> <p v-html = 'url'></p> </div> <script src = './vue.js'></script> <script> const app = new Vue({ el: '#app', data: { message: 'hello~vue!', url: "<a href = 'http://www.baidu.com'>百度一下</a>" } }) </script>

使用v-htm的p标签会忽略解析属性值中的数据绑定。

注意,不能使用 v-html 来复合局部模板,因为 Vue 不是基于字符串的模板引擎。 反之,对于用户界面 (UI),组件更适合作为可重用和可组合的基本单位。

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

3.特性

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 特性甚至不会被包含在渲染出来的 元素中。

4. 使用JavaScript表达式

<body> <div id = "app"> <h2>{{message}}</h2> <h2>{{firstName + lastName}}</h2> <h2>{{firstName}} {{lastName}}</h2> <h2>{{firstName + ' ' + lastName}}</h2> <h2>{{count * 2}}</h2> <h2>{{message * 2}}</h2> // NaN </div> <script src = './vue.js'></script> <script> const app = new Vue({ el: '#app', data: { message: 'hello~vue!', firstName: 'zheng', lastName: 'fx', count: 18 } }) </script> </body>

使用JavaScript表达式:

{{ number + 1 }} {{ ok ? 'YES' : 'NO' }} {{ message.split('').reverse().join('') }} <div v-bind:id="'list-' + id"></div>

每个绑定都只能包含单个表达式,所以下面的例子都不会生效

<!-- 这是语句,不是表达式 --> {{ var a = 1 }} <!-- 流控制也不会生效,请使用三元表达式 --> {{ if (ok) { return message } }}

模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 Math 和 Date 。你不应该在模板表达式中试图访问用户定义的全局变量。

最新回复(0)