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 相关文章推荐
用Javscript实现表单复选框的全选功能
May 25 Javascript
javascript 在网页中的运用(asp.net)
Nov 23 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 Javascript
JavaScript中对循环语句的优化技巧深入探讨
Jun 06 Javascript
JavaScript及jquey实现多个数组的合并操作
Sep 06 Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
Apr 22 Javascript
Angular2整合其他插件的方法
Jan 20 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
Apr 28 Javascript
如何用threejs实现实时多边形折射
May 07 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
PHP中Closure类的使用方法及详解
2015/10/09 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Python 中的 else详解
2016/04/23 Python
Python中字符串的修改及传参详解
2016/11/30 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
Python hashlib模块的使用示例
2020/10/09 Python
python 多线程中join()的作用
2020/10/29 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
战友聚会邀请函
2014/01/18 职场文书
党员教师工作决心书
2014/03/13 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
党员个人剖析材料
2014/09/30 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
解除租房协议书
2014/12/03 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
护理专业自我评价
2015/03/11 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript