一文读懂vue动态属性数据绑定(v-bind指令)


Posted in Javascript onJuly 20, 2020

v-bind的基本用法

一、本节说明

前面的章节我们学习了如何向页面html标签进行插值操作,那么如果我们想动态改变html标签的属性,该怎么办呢?
这就是我们这节开始要讲的内容v-bind.

二、 怎么做

一文读懂vue动态属性数据绑定(v-bind指令)

  • “:”为v-bind的简写形式,也可称为语法糖

三、 效果

一文读懂vue动态属性数据绑定(v-bind指令)

四、 深入

  • 在上图中将a标签的href属性值设置为toutiao,VUE实例将自动去data里面寻找toutiao属性进行值绑定。
  • 不只是a标签,所有的html标签属性都可以通过v-bind进行值绑定,然后通过改变数据动态改变它的属性值。

错误的写法

  • 注意一下:初学者容易犯错,这样写是错误的,v-bind:href="{{toutiao}}" rel="external nofollow" 。
  • 下面的写法也无法正常的完成属性值绑定操作,注意双引号中间有一对单引号。
<a v-bind:href="'toutiao'" rel="external nofollow" >今日头条(v-bind:href)</a>

一文读懂vue动态属性数据绑定(v-bind指令)

加上单引号之后,并不会进行属性值绑定,而是将字符串原样渲染后绑定属性上。

v-bind绑定calss属性(对象语法)

一、本节说明

v-bind绑定元素除了上一节那种直接进行单个属性值绑定,还可以传入对象和数组。如:本节我们讲解使用对象语法的方式对class属性进行绑定。

  • 我们先来看看,传统的html的css类引用语法
    <h2 class="css类名1 css类名2">html传统写法</h2>
  • v-bind对象语法,我们需要队css-class类名赋一个boolean值,来决定css类是否生效。
    <h2 v-bind:class="{css类名1: true|false, css类名2: true|false}">{{message}}</h2>

初次看这种写法,实在是繁琐,没有我们直接在html标签上写class更加简单。但是v-bind:class语法的好处就在于,我们可以动态的改变布尔值,来切换样式。

  • 问题:我们使用了v-bind:class,那么class属性还能不能用了?
    答:可以,完全不耽误,vue会帮你将二者合并
<h2 v-bind:class="{css类名1: true|false, css类名2: true|false}" class="css类名3">{{message}}</h2>

我们利用上面的语法,实现一个简单的需求:为文字增加颜色,并点击按钮实现颜色的切换。

二、 怎么做

首先,定义两个css的类,blue和red是两个css的类名

.blue {
 color: blue;
}
.red {
 color: red;
}

然后我们来实现视图模型,isBlue=true表示默认设置文字的颜色是蓝色的

一文读懂vue动态属性数据绑定(v-bind指令)

有的时候我们会觉得在双引号里面去写css类有点怪异,并且IDE无提示。css类比较多的情况下,我们也可以把属性值对象绑定,通过自定义函数来返回

一文读懂vue动态属性数据绑定(v-bind指令)

三、 效果

上面两种方式,实现的效果是一样的,蓝色的文字

一文读懂vue动态属性数据绑定(v-bind指令)

四、 深入

那我们如何动态的切换颜色呢,这就需要我们自定义方法啦

  • 视图代码,@click是v-on:click的简写形式,changeColor是我们自定义的切换颜色的方法
<button @click="changeColor">换颜色</button>
  • 视图模型(app),在methods代码段加入自定义函数changeColor
changeColor(){
 this.isBlue = !this.isBlue
 this.isRed = !this.isRed
}

最终效果

一文读懂vue动态属性数据绑定(v-bind指令)

v-bind绑定class属性(数组语法)

一、本节说明

在上一节中,我们讲了如何使用v-bind对象语法的方式绑定class属性,并实现了样式的切换。这一节我们来学习v-bind绑定class属性的另外一种语法-数组语法。这种数组语法在实际应用中并不如对象语法常见,其用法容易理解,但书写相对繁琐。

  • 数组语法绑定class类
<div :class="['css类名1','css类名2']">数组语法</div>
  • 数组中嵌套对象
<div :class="['css类名1', 'css类名2', {css类名3: true|false}]"> 数组中嵌套对象</div>
  • 注意对象里面的css类名不用加单引号,和上一节用法是一致的

二、 怎么做

我们利用数组语法,实现一个和上一节对象语法一样的需求:为文字增加颜色,并点击按钮实现颜色的切换。首先我们定义css类

一文读懂vue动态属性数据绑定(v-bind指令)

下面是具体的实现

一文读懂vue动态属性数据绑定(v-bind指令)

  • 我们默认的定义了一个带有css类名的数组['bold','blue'],默认是粗体蓝色
  • 使用pop()和push方法操作数组,pop是把数组最后一个元素移除,push是在数组尾部加入一个元素

三、 效果

一文读懂vue动态属性数据绑定(v-bind指令)

为文字增加颜色,并点击按钮实现颜色的切换(这里是浏览器截图,点击无效)

四、 深入:哪些数组操作是响应式的?

在上文中,我们使用数组的pop()和push()方法去操作数组元素,而不是使用this.cssArray[1] = 'blue'直接操作数组。因为这种通过下标操作数组的方式不是响应式的,也就是说虽然数组元素的值会发生变化,但不会导致页面颜色发生切换。

所以,当我们希望通过操作数据影响页面显示内容及显示效果的时候,要使用数组相关的函数,不能直接使用数组下标操作数据。下面列举一下经常用到的响应式的数组操作函数:

  • push(param…) 加入元素到数组的尾部
  • pop() 从数组的尾部弹出一个元素
  • shift() 从数组的头部移除一个元素
  • unshift(param…) 加入元素到数组的头部
  • splice() 可以实现指定下标的数组元素的删除、插入、替换
  • sort() 数组排序
  • reverse() 数组倒序排序

如果你对这些方法还不是很熟,有必要去复习一下这些js的基础知识。

v-bind绑定style属性

一、本节说明

上一节我们使用绑定对象或数组的语法来实现css的class类动态样式切换,这一节我们学习绑定style属性值实现动态的样式。

注意:

  • 我们使用v-bind来绑定class或style属性的主要目的是实现:css样式的动态切换。
  • 如果单纯的为html标签加样式,不需要动态切换,就不需要使用v-bind绑定。属于画蛇添足,自找麻烦。

二、 怎么做

直接在元素上通过 :style 的形式,书写样式对象

<h2 :style="{color: 'red', 'font-size': '40px'}">这是一个红色的H2</h2>

实现一个字体大小动态变化的需求

一文读懂vue动态属性数据绑定(v-bind指令)

  • 动态修改data.fontSize,从而达到动态改变字号大小的目的。
  • 从上图中,我们可以看到,可以将css样式属性保存在一个对象里面,绑定到style属性上面。
  • 抽取其中需要变化的部分,用数据模型变量来替换。从而达到动态修改样式的效果

三、 效果

一文读懂vue动态属性数据绑定(v-bind指令)

四、 深入

style属性除了可以绑定一个对象,还可以使用数组绑定的语法,引用多个 data 上的样式对象。用法如下:

  • 在data上定义样式:
data: {
 style1: { color: 'red', 'font-size': '40px', 'font-weight': '200' },
 style2: { font-style: 'italic' }
}

在元素中,通过属性绑定的形式,将样式对象组成一个数组应用到元素中:

<h2 :style="[style1, style2]">这是一个蓝色的斜体的h2</h2>

以上就是一文读懂vue动态属性数据绑定(v-bind指令)的详细内容,更多关于vue 动态属性数据绑定的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
代码获取历史上的今天发生的事
Apr 11 Javascript
jQuery实现的Div窗口震动特效
Jun 09 Javascript
jQuery获取字符串中出现最多的数
Feb 22 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
Jun 16 Javascript
第一次接触神奇的Bootstrap菜单和导航
Aug 01 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
Aug 17 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
小程序Scroll-view上拉滚动刷新数据
Jun 21 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 Javascript
在Vue 中实现循环渲染多个相同echarts图表
Jul 20 #Javascript
解决echarts数据二次渲染不成功的问题
Jul 20 #Javascript
详细分析vue表单数据的绑定
Jul 20 #Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
Jul 20 #Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 #Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
Jul 20 #Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
Jul 20 #Javascript
You might like
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
ant design实现圈选功能
2019/12/17 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
python进阶教程之异常处理
2014/08/30 Python
python学习数据结构实例代码
2015/05/11 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Django中Middleware中的函数详解
2019/07/18 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
给海归自荐信的建议
2013/12/13 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
销售竞赛活动方案
2014/08/23 职场文书
销售员试用期自我评价
2014/09/15 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
公务员考察材料
2014/12/23 职场文书
超强台风观后感
2015/06/09 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python