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

在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,在应用状态改变时,Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。

如果你熟悉虚拟 DOM 并且偏爱 JavaScript 的原始力量,你也可以不用模板,直接写渲染 (render) 函数,使用可选的 JSX 语法。

一、插值

1、通过Vue向dom中插入文本

(1)、常用的数据绑定

数据绑定最常见的形式就是使用"Mustache"语法(双大括号)的文本插值:

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

Mustache标签会被替代为数据对象中的msg属性,无论何时,绑定的数据对象上的msg发生了改变,插值处的内容都会被更新.

(2)、只绑定一次的Vue指令

通过使用v-once指令,可以执行一次插值,当数据改变时,插值处的内容不会发生改变。注:这会影响该节点上所有的数据绑定.代码如下:

<body>
<div id="currentPage">
<p v-once>这个将不会改变:{{msg}}</p>
</div>
</body>
<script type="text/javascript">
var page=new Vue({
el:"#currentPage",
data:{
msg:"只绑定一次,就算模型发生改变,dom中的数据也不会更新"
}
});
</script>

2、通过Vue向dom中插入原始html代码

Vue会将双大括号中的数据渲染未纯文本,而非html代码,为了能输出html,Vue提供了v-html指令来输出html代码,代码如下:

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

这个div的内容将会被替换成属性值rawHtml,注:当属性值被渲染成html的时候,会忽略属性值中其他的数据绑定,Vue 不是基于字符串的模板引擎.

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

3、特性

Mustache语法不能作用在Html特性上,所以绑定Html特性必须使用Vue提供的v-bind指令,具体请参考Vue.js系列之一初识Vue

在布尔特性的情况下,它们的存在即暗示为 truev-bind 工作起来略有不同,代码如下:

<div id="currentPage">
<button v-bind:disabled="isButtonDisabled">Button</button>
</div>
</body>
<script type="text/javascript">
var page=new Vue({
el:"#currentPage",
data:{
isButtonDisabled:null
}
});
</script>

只有isButtonDisabled 的属性值是true的时候,才会被渲染到html代码中,当isButtonDisabled 的属性值是null、undefined、false,将不会被渲染到html代码中.

4、在Mustache表达式(模版表达式)中使用JavaScript 表达式

前面的内容介绍了简单的数据属性绑定到dom上。但实际上,对于所有的数据绑定,Vue都提供了完全的Js支持.代码如下:

<body>
<div id="currentPage">
<p>{{num+1}}</p>
<p>{{ok?'Yes':'No'}}</p>
<p>{{ message.split('').reverse().join('') }}</p>
</div>
</body>
<script type="text/javascript">
var currPage=new Vue({
el:"#currentPage",
data:{
num:111,
ok:true,
message:"Hello Vue.js"
}
});
</script>

注:这些表达式会在所属Vue实例的数据作用域下作为Js表达式被解析,唯一美中不足的是每个绑定只能包含单个表达式,所以下面的例子不会生效:

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

注:不能在模版表达式中访问用户定义的全局变量。只能访问全局变量的一个白名单,如 Math 和Date

5、Vue指令

指令是带有v-前缀的特殊属性,指令属性的预期值是单个Js表达式(v-for是例外情况),指令的作用是当表达式的值发生改变时,将其产生的连带影响,响应式地作用于 DOM,代码如下:

<body>
<div id="currentPage">
<p v-if="seen">显示</p>
</div>
</body>
<script type="text/javascript">
var currPage=new Vue({
el:"#currentPage",
data:{
seen:true
}
});
</script>

这里,v-if 指令将根据表达式 seen 的值的真假来插入/移除 <p> 元素。

6、指令参数

一些指令能够接受一个"参数",在指令之后以冒号表示。例如,v-bind指令可以用于响应式的更新html属性,代码如下:

<body>
<div id="currentPage">
<a v-bind:href="url">baidu</a>
</div>
</body>
<script type="text/javascript">
var currPage=new Vue({
el:"#currentPage",
data:{
url:"https://www.baidu.com"
}
});
</script>

在这里href是参数,告知v-bind指令将该元素的href属性与url的值绑定.另一个例子是v-on指令,它用于监听dom事件,这里不多做介绍.

7、Vue 修饰符

请参考小坦克的日常Vue修饰符

8、关于Vue指令的缩写

<!-- 完整语法 -->
<a v-on:click="doSomething">...</a>
<!-- 缩写 -->
<a @click="doSomething">...</a> <!-- 完整语法 -->
<a v-bind:href="url">...</a>
<!-- 缩写 -->
<a :href="url">...</a> <!--完整语法 -->
<input v-on:keyup.enter="submit">
<!-- 缩写语法 -->
<input @keyup.enter="submit">

Vue.js系列之三模板语法的更多相关文章

  1. 前端框架vue.js系列(9):Vue.extend、Vue.component与new Vue

    前端框架vue.js系列(9):Vue.extend.Vue.component与new Vue 本文链接:https://blog.csdn.net/zeping891103/article/det ...

  2. Vue.js 系列教程 ②

    这是关于 JavaScript 框架 Vue.js 五个教程的第二部分.在这一部分,我们将学习组件,Props 以及 Slots.这不是一个完整的指南,而是基础知识的概述,所以你可以了解Vue.js ...

  3. Vue.js 系列教程 3:Vue-cli,生命周期钩子

    原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...

  4. Vue.js 系列教程 2:组件,Props,Slots

    原文:intro-to-vue-2-components-props-slots 译者:nzbin 这是关于 JavaScript 框架 Vue.js 五个教程的第二部分.在这一部分,我们将学习组件, ...

  5. Vue.js 系列教程 3:Vue

    原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...

  6. Vue.js 系列教程 4:Vuex

    这是关于 JavaScript 框架 Vue.js 五个教程的第四部分.在这一部分,我们会学习使用 Vuex 进行状态管理. 这不是一个完整的指南,而是基础知识的概述,所以你可以了解 Vue.js 以 ...

  7. Vue.js系列之项目结构说明

    转:https://www.jb51.net/article/111658.htm 前言 在上一篇项目搭建文章中,我们已经下载安装了node环境以及vue-cli,并且已经成功构建了一个vue-cli ...

  8. vue.js的一些模板指令简述

    1.模板指令都是写在<template></template>html里面   v-text : value是什么就显示什么,如果value里面有html的标签,也会直接显示出 ...

  9. vue入门:(模板语法与指令)

    vuejs使用及HTML的模板语法,可以实现声明式将DOM绑定至底层VUE实例的数据.通过模板语法将数据渲染进DOM的系统,结合响应系统,在应用状态改变时,Vue能够计算出重新渲染组件的最小代价并应用 ...

随机推荐

  1. 网页程序 vs 桌面程序

    网页程序 vs 桌面程序 阅读:  评论:  作者:Rybby  日期:  来源:rybby.com 所谓的网页程序就是指以网页作为程序的操作界面,通过脚本语言“javascript”或其它客户端语言 ...

  2. [label][翻译][JavaScript Regular Expression]JavaScript Regular Expressions

    原文:http://www.javascriptkit.com/javatutors/re.shtml 校验用户的输入是每一个软件开发者的必须要做的事情. 正则表达式与模式 如何在JavaScript ...

  3. [Linux]几个armhf的ubuntu源

    摘自百度贴吧,留存 http://mirrors.ustc.edu.cn/ubuntu-ports/http://ftp.ubuntu-tw.org/mirror/ubuntu-ports/http: ...

  4. jvm lock低性能分析

    日志平台client面临着输出日志的问题.为了避免干扰业务系统,我们采用异步输出的方式.这实际上相当于一个多生产者-单消费者的多线程模型.传统的方式是使用同步加锁的方式,但是这种方式不够高效.之前 钟 ...

  5. ES6 学习笔记之三 函数参数默认值

    定义函数时为参数指定默认值的能力,是现代动态编程语言的标配.在ES6出现之前,JavaScript是没有这种能力的,框架为了实现参数默认值,用了很多技巧. ES6 的默认参数值功能,与其他语言的语法类 ...

  6. Winform 搭建http服务器

    using System; using System.Collections; using System.IO; using System.Net; using System.Net.Sockets; ...

  7. java web service wsdlLocation 不写死 可动态配置

    本解决方案用例Maven 如果项目没用Maven的客园参考扩展一下思路 寻找下适合解决自己项目的方式

  8. iis 中https修改主机名方法

    来源地址:  https://www.pianyissl.com/support/page/29

  9. 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击

    Web的套接字函数库:urllib2 一开始以urllib2.py命名脚本,在Sublime Text中运行会出错,纠错后发现是重名了,改过来就好: #!/usr/bin/python #coding ...

  10. APP间传递消息

    https://www.jianshu.com/p/d640ccfcea5f 1: URL Scheme 常用的App间传值方式.常见于分享等. 2: Keychain  借助系统类 Keychain ...