Vue.js中数据绑定的语法教程


Posted in Javascript onJune 02, 2017

数据绑定语法

Vue.js 的模板是基于 DOM 实现的。这意味着所有的 Vue.js 模板都是可解析的有效的 HTML,且通过一些特殊的特性做了增强。Vue 模板因而从根本上不同于基于字符串的模板,请记住这点。

插值

文本

数据绑定最基础的形式是文本插值,使用 “Mustache” 语法(双大括号):

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

Mustache 标签会被相应数据对象的 msg 属性的值替换。每当这个属性变化时它也会更新。

你也可以只处理单次插值,今后的数据变化就不会再引起插值更新了:

<span>This will never change: {{* msg }}</span>

原始的 HTML

双 Mustache 标签将数据解析为纯文本而不是 HTML。为了输出真的 HTML 字符串,需要用三 Mustache 标签:

<div>{{{ raw_html }}}</div>

内容以 HTML 字符串插入——数据绑定将被忽略。如果需要复用模板片断,应当使用partials。

在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。记住,只对可信内容使用 HTML 插值,永不用于用户提交的内容。

HTML 特性

Mustache 标签也可以用在 HTML 特性 (Attributes) 内:

<div id="item-{{ id }}"></div>

注意在 Vue.js 指令和特殊特性内不能用插值。不必担心,如果 Mustache 标签用错了地方 Vue.js 会给出警告。

绑定表达式

放在 Mustache 标签内的文本称为绑定表达式。在 Vue.js 中,一段绑定表达式由一个简单的 JavaScript 表达式和可选的一个或多个过滤器构成。

JavaScript 表达式

到目前为止,我们的模板只绑定到简单的属性键。不过实际上 Vue.js 在数据绑定内支持全功能的 JavaScript 表达式:

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

这些表达式将在所属的 Vue 实例的作用域内计算。一个限制是每个绑定只能包含单个表达式,因此下面的语句是无效的:

<!-- 这是一个语句,不是一个表达式: -->
{{ var a = 1 }}

<!-- 流程控制也不可以,可改用三元表达式 -->
{{ if (ok) { return message } }}

过滤器

Vue.js 允许在表达式后添加可选的“过滤器 (Filter) ”,以“管道符”指示:

{{ message | capitalize }}

这里我们将表达式 message 的值“管输(pipe)”到内置的 capitalize 过滤器,这个过滤器其实只是一个 JavaScript 函数,返回大写化的值。Vue.js 提供数个内置过滤器,在后面我们会谈到如何开发自己的过滤器。

注意管道语法不是 JavaScript 语法,因此不能在表达式内使用过滤器,只能添加到表达式的后面。

过滤器可以串联:

{{ message | filterA | filterB }}

过滤器也可以接受参数:

{{ message | filterA 'arg1' arg2 }}

过滤器函数始终以表达式的值作为第一个参数。带引号的参数视为字符串,而不带引号的参数按表达式计算。这里,字符串 'arg1' 将传给过滤器作为第二个参数,表达式 arg2 的值在计算出来之后作为第三个参数。

指令

指令 (Directives) 是特殊的带有前缀 v- 的特性。指令的值限定为绑定表达式,因此上面提到的 JavaScript 表达式及过滤器规则在这里也适用。指令的职责就是当其表达式的值改变时把某些特殊的行为应用到 DOM 上。我们来回头看下“概述”里的例子:

<p v-if="greeting">Hello!</p>

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

参数

有些指令可以在其名称后面带一个“参数” (Argument),中间放一个冒号隔开。例如,v-bind 指令用于响应地更新 HTML 特性:

<a v-bind:href="url" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>

这里 href 是参数,它告诉 v-bind 指令将元素的 href 特性跟表达式 url 的值绑定。可能你已注意到可以用特性插值 href="{{url}}" rel="external nofollow" 获得同样的结果:这样没错,并且实际上在内部特性插值会转为 v-bind 绑定。

另一个例子是 v-on 指令,它用于监听 DOM 事件:

<a v-on:click="doSomething">

这里参数是被监听的事件的名字。我们也会详细说明事件绑定。

修饰符

修饰符 (Modifiers) 是以半角句号 . 开始的特殊后缀,用于表示指令应当以特殊方式绑定。例如 .literal 修饰符告诉指令将它的值解析为一个字面字符串而不是一个表达式:

<a v-bind:href.literal="/a/b/c"></a>

当然,这似乎没有意义,因为我们只需要使用 href="/a/b/c" rel="external nofollow" 而不必使用一个指令。这个例子只是为了演示语法。后面我们将看到修饰符更多的实践用法。

缩写

v- 前缀是一种标识模板中特定的 Vue 特性的视觉暗示。当你需要在一些现有的 HTML 代码中添加动态行为时,这些前缀可以起到很好的区分效果。但你在使用一些常用指令的时候,你会感觉一直这么写实在是??隆6?以诠菇ǖヒ秤τ茫?PA )时,Vue.js 会管理所有的模板,此时 v- 前缀也没那么重要了。因此Vue.js 为两个最常用的指令 v-bind 和v-on 提供特别的缩写:

v-bind 缩写

<!-- 完整语法 -->
<a v-bind:href="url" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>

<!-- 缩写 -->
<a :href="url" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>

<!-- 完整语法 -->
<button v-bind:disabled="someDynamicCondition">Button</button>

<!-- 缩写 -->
<button :disabled="someDynamicCondition">Button</button>

v-on 缩写

<!-- 完整语法 -->
<a v-on:click="doSomething"></a>

<!-- 缩写 -->
<a @click="doSomething"></a>

它们看起来跟“合法”的 HTML 有点不同,但是它们在所有 Vue.js 支持的浏览器中都能被正确地解析,并且不会出现在最终渲染的标记中。缩写语法完全是可选的,不过随着一步步学习的深入,你会庆幸拥有它们。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
深入理解JavaScript系列(39):设计模式之适配器模式详解
Mar 04 Javascript
JS中产生标识符方式的演变
Jun 12 Javascript
jquery 遍历数组 each 方法详解
May 25 Javascript
JavaScript实战之菜单特效
Aug 16 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
小发现之浅谈location.search与location.hash的问题
Jun 23 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
微信小程序之圆形进度条实现思路
Feb 22 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
Sep 21 Javascript
Vue 3.x+axios跨域方案的踩坑指南
Jul 04 Javascript
JS数组索引检测中的数据类型问题详解
Jan 11 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 23 Javascript
SpringMVC+bootstrap table实例详解
Jun 02 #Javascript
BootStrap daterangepicker 双日历控件
Jun 02 #Javascript
ES6中箭头函数的定义与调用方式详解
Jun 02 #Javascript
Js实现京东无延迟菜单效果实例(demo)
Jun 02 #Javascript
javascript实现延时显示提示框效果
Jun 01 #Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 #jQuery
vue.js 获取当前自定义属性值
Jun 01 #Javascript
You might like
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
jQuery学习笔记之Helloworld
2010/12/22 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
对python:循环定义多个变量的实例详解
2019/01/20 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
常用的10个Python实用小技巧
2020/08/10 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
业务副厂长岗位职责
2014/01/03 职场文书
电子信息专业自荐书
2014/02/04 职场文书
钱学森观后感
2015/06/04 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS