Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。
在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。
如果你熟悉虚拟 DOM 并且偏爱 JavaScript 的原始力量,你也可以不用模板,直接写渲染 (render) 函数,使用可选的 JSX 语法。
文本插值
通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- </head>
- <script type="text/javascript" src="./js/vue.js"></script>
- <body>
- <div id="app" v-once>
- {{msg}}
- </div>
- </body>
- <script type="text/javascript">
- var vm = new Vue({
- el:"#app",
- data:{
- msg:"hi vue",
- }
- });
-
- vm.msg="change";
- </script>
- </html>
-
展示,后边赋值chage并未渲染到模板页
双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- </head>
- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
- <body>
- <div id="app">
- <!-- 这段HTML标签不解析 -->
- <p>Using mustaches: {{ rawHtml }}</p>
- <!-- 这段渲染的HTML标签会被解析 -->
- <p>Using v-html directive: <span v-html="rawHtml"></span></p>
- </div>
- </body>
- <script type="text/javascript">
- var vm = new Vue({
- el:"#app",
- data:{
- rawHtml:'<span style="color:red">this is should be red</span>'
- }
- });
- </script>
-
- </html>
-
显示结果页面
Mustache 语法不能作用在 HTML attribute 上,遇到这种情况应该使用 v-bind 指令:
格式:
v-bind:属性=“变量”
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- </head>
- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
- <body>
- <div id="app" v-once>
- <div v-bind:class="color">
- test...
- </div>
- </div>
- </body>
- <script type="text/javascript">
- var vm = new Vue({
- el:"#app",
- data:{
- // color:'red',
- color:'blue' //设置绑定属性名为color的变量值为blue
- }
- });
- </script>
- <style type="text/css">
- .red{color: red;}
- .blue{color: blue;font-size: 100px;}
- </style>
-
-
- </html>
-
显示结果页面
Vue.js 都提供了完全的 JavaScript 表达式支持。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- </head>
- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
- <body>
- <div id="app" v-once>
- <!-- 进行加法运算 -->
- <p>{{number + 1}}</p>
- <!-- 三元运算 今天是你的生日吗 ? '是,祝你生日快乐' : '不是,同样祝你今天快乐'-->
- <p>{{ ok ? 'YES' : 'NO' }}</p>
- <!-- 函数运算的使用 split()将字符串以没有内容的形式拆分成字母数组,reverse()将数组翻转,join()将数组连接成字符串-->
- <p>{{ message.split('').reverse().join('') }}</p>
- </div>
- </body>
- <script type="text/javascript">
- var vm = new Vue({
- el:"#app",
- data:{
- number:10, //数字运算
- ok:0, //三元运算
- message:'vue' //函数运算
- }
- });
- </script>
-
-
- </html>
-
显示页面