浅入深出Vue:数据绑定
上一篇我们使用了简单的数据渲染,那么如果说我们想要动态渲染标签的 class
可以这么操作么?
为什么绑定
简单的数据渲染,包括表达式、函数在内。其实都只是在标签中渲染,如果遇到以下情况怎么办呢:
需要在标签内部进行某种 "骚操作" 。
需要控制流来控制不同数据下的不同渲染效果。
需要渲染一个数组。
这时候简单渲染就不能很好的解决问题了,怎么办 ?
来一发数据绑定吧!
绑定是什么
在了解绑定是什么之前,先了解一下什么是指令:
在 " vue" 中,指令是带有 v-
前缀的特殊属性,用来修饰标签的(自定义组件在这里也统一归为标签,因为其使用方式和原生标签一样),其值的约束和模板语法一样,支持表达式、变量。
- 指令会监测其值的变化,并将其的变化反应给所处的DOM
我们来看一下上一章最后的例子:
<h1>{{ if(msg == '1') return time }}</h1>
在这里我们是想利用控制流来控制是否显示时间,但是很遗憾,模板语法并不支持js语法。
但是 " vue" 中有这样一个指令来弥补模板语法不支持 js语法的遗憾:
v-if
下面看看修改后的代码:
<h1 v-if="msg=='1'">{{ formatTime(time) }}</h1>
先将 msg
的值赋值为1
:
然后再修改一下 msg
的值看看:
什么也没有显示,因为我们 msg
的值并不是 1
。
v-if
指令很完美的解决了我们最开始提出来的第二个问题:
- 需要控制流来控制不同数据下的不同渲染效果。
让我们回到最开始的话题。
这就是指令,而在官方原生的指令中,有一个指令是专门用来绑定标签属性的:
v-bind
命名很形象,bind
直译就是绑定的意思。
如何绑定
这里利用 div
标签展示一下 v-bind
的使用方式,用在其它标签上同理:
<div v-bind:属性名="表达式"></div>
我们拿第一个问题举例实践一下:
- 需要在标签内部进行某种 "骚操作"。
这里我们就根据 isDark
的值来确定时间显示的背景色吧
当
isDark
为 true 的时候,背景色变成黑色,文字变成白色。当
isDark
为 false的时候,背景色变成白色,文字变成黑色。
先来定义 isDark
:
data() {
return {
msg: 'hello vue',
time: new Date(),
isDark: False
}
}
然后添加一下两种条件下的样式:
<style>
.dark{
background-color: black;
color: white;
}
.light{
background-color: white;
color: black;
}
</style>
接下来给 h1
标签加上绑定指令:
<h1 v-bind:class="isDark ? 'dark' : 'light'">{{ formatTime(time) }}</h1>
效果如下:
我们将 isDark
的值修改成 true:
很完美的达到了所需求的效果。
这就是指令的魅力。
最后一个问题
上述两个指令解决了我们最初提出来三个问题中的两个,那么剩下一个呢?
- 需要渲染一个数组。
当我们需要渲染表格的时候就会遇到这个场景,如何去渲染一个数组呢?模板语法又并不支持这么复杂的操作。
请出本章最后一个指令:
v-for
嗯,还是很形象。js里面也有 for 嘛~
先看看它是做什么的:
v-for
会为数据源(绑定的列表)中的每一项,生成一个同类的标签。
然后看看怎么用,这里用 a 标签做说明,其他标签类似:
<!-- 写法1 -->
<a v-for="别名 in 数据源" v-bind:key="唯一标识">{{ 别名.字段 }}</a>
<!-- 写法2 -->
<a v-for="(下标, 别名) in 数据源" v-bind:key="唯一标识">{{ 别名.字段 }}</a>
因为新版本的 vue
要求使用 v-for
指令渲染的标签必须绑定一个key用做唯一标识,大多数情况下我们可以直接使用下标来进行标识
继续使用我们之前的代码进行演示,先定义一个 url的数组:
data() {
return {
msg: 'hello vue',
time: new Date(),
isDark: true,
urlList: [
{
text: '链接1',
url: '#1'
},
{
text: '链接2',
url: '#2'
},
{
text: '链接3',
url: '#3'
}
]
}
}
然后渲染安排一波:
<a v-for="(item, index) in urlList" v-bind:key="index" v-bind:href="item.url">{{item.text}}</a>
效果如下:
渲染的结果是三个 a
标签,非常正确~
很完美的解决了最后一个问题。
还有些什么指令呢?
官方还有其他的指令,这里再提一个:
v-on
v-on
指令可以绑定事件,比如说按钮的点击事件。
像上面切换背景的例子中,可以通过一个按钮的点击事件来修改 isDark
的值,从而控制背景的改变。就不需要每次都手动来修改下 isDark
的值了。
这个实践就留给好奇心止不住的你来吧~
浅入深出Vue:数据绑定的更多相关文章
- 浅入深出Vue:前言
浅入深出Vue系列文章 之前大部分是在做后端,后来出于某些原因开始接触Vue.深感前端变化之大,各种工具.框架令人眼花缭乱.不过正是这些变化,让前端开发更灵活. 博主在刚开始时,参考官网的各个步骤以及 ...
- 浅入深出Vue:环境搭建
浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...
- 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置
浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...
- 浅入深出Vue:工具准备之WebStorm安装配置
浅入深出Vue之工具准备(一):WebStorm安装配置 工欲善其事必先利其器,让我们先做好准备工作吧 导航篇 WebStorm安装配置 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版 ...
- 浅入深出Vue系列
浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...
- 浅入深出Vue:第一个页面
今天正式开始入门篇,也就是实战了~ 首先我们是要做一个博客网站,UI 框架采用江湖传闻中的 ElementUI,今天我们就来利用它确定我们博客网站的基本布局吧. 准备工作 新建一个vue项目(可以参考 ...
- 浅入深出Vue:代码整洁之封装
深入浅出vue系列文章已经更新过半了,在入门篇中我们实践了一个小小的项目. <代码整洁之道>一书中提到过一句话: 神在细节中 这句话来自20世纪中期注明现代建筑大师 路德维希·密斯·范·德 ...
- 浅入深出Vue:文章列表
终于到我们小项目的最后一个功能了,那就是列表页展示! 新建组件 先来新建组件 List.vue: <template> <div></div> </templ ...
- 浅入深出Vue:自动化路由
在软件开发的过程中,"自动化"这个词出现的频率是比较高的.自动化测试,自动化数据映射以及各式的代码生成器.这些词语的背后,也说明了在软件开发的过程中,对于那些重复.千篇一律的事情. ...
随机推荐
- VSCode 小鸡汤 第01期 - REST Client 简单好用的接口测试辅助工具
介绍 今天给大家介绍一个后端开发辅助的好工具 -- REST Client,插件如其名这就是一个 REST 的客户端插件,把我们的 VSCode 转化为一个 REST 接口测试的利器 我们一般都会用 ...
- Android系统联系人全特效实现(上),分组导航和挤压动画
记得在我刚接触Android的时候对系统联系人中的特效很感兴趣,它会根据手机中联系人姓氏的首字母进行分组,并在界面的最顶端始终显示一个当前的分组.如下图所示: 最让我感兴趣的是,当后一个分组和前一个分 ...
- 1 开始ThreeJs
因为需要 需要一款 网页上的 游戏引擎 通过百度知道了 three.js 1.先从github上clone下源码 https://github.com/mrdoob/three.js 2.下载web ...
- Android Studio怎样提示函数使用方法
Eclipse有一个非常好的功能,就是当你代码调用某个android API时,鼠标移到相应的函数或者方法上,就会自己主动有一个悬 浮窗提示该函数的说明(所包括的參数含义,该方法功能).迁移到Andr ...
- mingw-w64-3.10-osx10.9.sh,uninstall-macports.sh,Build NSIS on OSX
https://gist.github.com/artynet/188bb34cfc94acdb554d283a3502770a --cross-compile-prefix=i686-w64-min ...
- Java 阅读TXT文件
public class GenCategoryAttrItemHandler { private final static String INPUT_FILE_PATH = "input/ ...
- SQL基础 关键字
SQL语言类型 数据定义:create/alter/drop table/trigger/index/function/存储过程/约束/…数据操纵:select/update/insert/delet ...
- 使用StringBuilder与SqlParameter
好处: 防止sql注入:占用内存更少 例子: 传参有业务查询条件startDate,endDate,A,每页数据个数pageSize,当前查询页码pageIndex string sql = @&qu ...
- Centos上通过shell脚本实现数据库备份和还原
最近有个这样的需求,通过shell脚本实现数据库备份还原,最后通过网上查询自己测试实现,将脚本分享给大家 1.数据库备份脚本 #!/bin/bash ds=`` list=`date +%Y`/`da ...
- 消息队列中点对点与发布订阅区别(good)
背景知识 JMS一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914).2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1 ...