Vue数据绑定实例写法


Posted in Javascript onAugust 06, 2019

为什么绑定

简单的数据渲染,包括表达式、函数在内。其实都只是在标签中渲染,如果遇到以下情况怎么办呢:

需要在标签内部进行某种 "骚操作" 。

需要控制流来控制不同数据下的不同渲染效果。

需要渲染一个数组。

这时候简单渲染就不能很好的解决问题了,怎么办 ?

来一发数据绑定吧!

绑定是什么

在了解绑定是什么之前,先了解一下什么是指令:

在 " 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

Vue数据绑定实例写法

然后再修改一下 msg的值看看:

Vue数据绑定实例写法

什么也没有显示,因为我们 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>

 

效果如下:

Vue数据绑定实例写法

我们将 isDark 的值修改成 true:

Vue数据绑定实例写法

很完美的达到了所需求的效果。

这就是指令的魅力。

最后一个问题

上述两个指令解决了我们最初提出来三个问题中的两个,那么剩下一个呢?

需要渲染一个数组。

当我们需要渲染表格的时候就会遇到这个场景,如何去渲染一个数组呢?模板语法又并不支持这么复杂的操作。

请出本章最后一个指令:

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" rel="external nofollow" >{{item.text}}</a>

 

效果如下:

Vue数据绑定实例写法

渲染的结果是三个 a 标签,非常正确~

很完美的解决了最后一个问题。

还有些什么指令呢?

官方还有其他的指令,这里再提一个:

v-on

v-on 指令可以绑定事件,比如说按钮的点击事件。

像上面切换背景的例子中,可以通过一个按钮的点击事件来修改 isDark的值,从而控制背景的改变。就不需要每次都手动来修改下 isDark的值了。

感谢大家学习以上知识点内容和对三水点靠木的支持。

Javascript 相关文章推荐
js实现的网站首页随机公告随机公告
Mar 14 Javascript
jQuery中:image选择器用法实例
Jan 03 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
Jun 05 Javascript
JavaScript设计模式初探
Jan 07 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
Angular移动端页面input无法输入的解决方法
Nov 14 Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 Javascript
vue中uni-app 实现小程序登录注册功能
Oct 12 Javascript
vue 遮罩层阻止默认滚动事件操作
Jul 28 Javascript
在Vue中使用HOC模式的实现
Aug 23 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
Jan 18 Javascript
Vue代码整洁之去重方法整理
Aug 06 #Javascript
VUE写一个简单的表格实例
Aug 06 #Javascript
VUE前后端学习tab写法实例
Aug 06 #Javascript
Vue路由前后端设计总结
Aug 06 #Javascript
vue实现行列转换的一种方法
Aug 06 #Javascript
微信小程序点餐系统开发常见问题汇总
Aug 06 #Javascript
详解使用WebPack搭建React开发环境
Aug 06 #Javascript
You might like
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
PHP实现分页的一个示例
2006/10/09 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
JavaScript OOP面向对象介绍
2010/12/02 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
使用django实现一个代码发布系统
2019/07/18 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
python 伯努利分布详解
2020/02/25 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python执行时间的几种计算方法
2020/07/31 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
软件测试面试题
2014/01/05 面试题
优秀的导游求职信范文
2014/04/06 职场文书
大雁塔英文导游词
2015/02/10 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript