Vue对DOM元素的class和style两个特性做了专门的增强,即对CSS类和内联样式做了一层封装,通过v-bind指令来处理它们,而接收的表达式既可以是简单的字符串、对象或数组,也可以是复杂的计算属性。不仅如此,Vue还为表单设计了一些语法糖,让表单处理变得尤为简单。

一、CSS类

  v-bind指令与class参数配合,就能处理CSS类,并且能接收多种类型的值。

1)对象

  v-bind:class可以接收一个对象,对象的属性名就是CSS类名,只有当其值是真值时,才能添加到DOM元素上,否则会被忽略。下面的<p>元素会接收数据对象中的classList,它包含两个属性warning和cur,其中cur属性保存了一个假值。

<

  渲染出的<p>元素如下所示,不包含cur类。

<

  此外,v-bind:class可简写成:class,并且能与普通的class特性共存,如下所示。

<

2)数组

  当v-bind:class接收一个数组时,其元素既可以是CSS类名,也可以是对象,格式与之前相同,如下所示。

<

二、内联样式

  v-bind指令与style参数配合,就能避免通过字符串拼接的方式来处理内联样式,并且也能接收多种类型的值。

1)对象

  v-bind:style可以接收一个对象,对象的属性名有两种命名方式:驼峰式和连字符分隔式,第二种就是层叠样式表中的CSS属性的命名方式。下面的<p>元素会接收数据对象中的cssObj,其属性采用了两种命名方式。

<

  渲染出的<p>元素如下所示。

<

  Vue允许为属性赋一个包含多个值的数组(即多重值),可让浏览器选择支持的属性,例如定义不同阶段的伸缩盒样式,如下所示。

<

2)数组

  当v-bind:style接收一个数组时,其元素就是样式对象,并且如果出现同名的CSS属性,那么后面的会覆盖前面的。例如下面的cssObj1和cssObj2两个对象都包含line-height属性,而最终渲染出的值为1.5。

<

3)浏览器前缀

  Vue会自动侦测浏览器样式的兼容性,并根据需要为CSS属性(例如border-radius、transform等)添加相应的浏览器前缀。

  下面的代码摘自Vue.js,其中camelize()函数可将连字符分隔式的字符串转换成驼峰式的字符串;vendorNames变量记录了三种浏览器前缀;normalize()函数会判断传入的属性是否存在于<div>元素的style属性中,如果不存在,就为其添加浏览器前缀,而之所以单独处理filter属性是因为Chrome的一个bug,虽然Chrome只支持-webkit-filter属性,但是style属性中保存的却是无前缀的filter。

var 

三、表单

  Vue提供了v-model指令,可在表单控件上实现双向数据绑定,即修改控件的值,也会自动更新Vue实例中所对应的数据对象的属性,反之亦然。

1)v-model

  下面用一个示例来演示v-model指令的用法,文本框的初始值是“strick”,当修改<input>元素中的值时,<p>元素的文本也会随之更新。

<

  而如果在控制台执行下面这条赋值语句,那么就会更新<input>元素中的值,其实这就是Vue的双向数据绑定所起的作用。

vm

  在使用v-model指令时需要注意,表单控件的初始值得声明在数据对象的属性中,而不是value、checked或selected这些特性中。还是以之前的文本框为例,添加了一个value特性,如下所示,渲染出的控件值将是“strick”,而不是“init”。

<

  v-model本质上是个语法糖,它在内部会监听表单控件相关特性的变化,并触发相应的事件,其对应关系如表4所示。

表4 v-model指令内部的对应关系

2)表单控件

  将v-model指令作用于表单控件时,其初始值常用的类型会有所不同,如下所示。

var 

  当只使用一个复选框时,v-model指令可绑定一个布尔值;而当使用多个复选框时,v-model指令适合绑定数组,如下所示。

<

  单选框与复选框不同,由于它只能选中一个值,因此不适合绑定数组,如下所示。

<

  选择框的multiple特性能控制其是否多选,而这也会决定是否需要绑定数组,如下所示。

<

3)值绑定

  单选框、复选框和选择框的值原先只能是字符串或布尔值,而通过v-bind指令就能让它们绑定任意类型的值,如下所示,为两个单选框的value特性绑定了一个对象。当选中其中一个按钮时,color属性的值就会更新成绑定的对象。

<

  复选框包含两个特殊的特性:true-value和false-value(如下代码所示),当将其选中时,toggle属性会更新为yes属性的值,否则更新为no属性的值。

<

4)修饰符

  Vue为v-model指令提供了3个修饰符,如下所列,每个修饰符后面都给出了相应的示例。

  (1).lazy修饰符能将同步输入值的事件从input替换成change,以下面的文本框为例,只有当修改其值并失去焦点时,才会更新数据对象的name属性。

<

  (2).number修饰符能让输入值自动转换成数字,常与number类型的文本框配合使用。

<

  (3).trim修饰符能过滤输入值的首尾空格。

<

vue 数组添加元素_Vue躬行记(3)——样式和表单相关推荐

  1. form表单 vue 拖拽_vue实现可视化可拖放的自定义表单(代码示例)

    本篇文章给大家带来的内容是关于vue实现可视化可拖放的自定义表单(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 实现如例子所示的可视化可拖放表单功能.整个页面,分为左中右 ...

  2. HTML躬行记(4)——Web音视频基础

    1.基础概念 本节音视频的基础概念摘自书籍<FFmpeg入门详解 音视频原理及应用>. 1.1音频 声音的三要素为频率.振幅和波形,即声音的音调.声波的响度和声音的音色. 音频是一种利用数 ...

  3. vue的lazy修饰符和number修饰符 、表单结构

    目录 vue的lazy修饰符 vue的number修饰符 表单的构成 表单域 表单控件 vue的lazy修饰符 在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 ...

  4. react hooks使用_我如何使用React Hooks在约100行代码中构建异步表单验证库

    react hooks使用 by Austin Malerba 奥斯汀·马勒巴(Austin Malerba) 我如何使用React Hooks在约100行代码中构建异步表单验证库 (How I bu ...

  5. 前端进阶_狂神Vue笔记_语法指令v-bind、v-on、v-for_表单双绑_组件_Axios异步通信_Vue的生命周期_计算属性_插槽 <slot>_webpack使用_vue-router路由

    四.第一个Vue程序 4.1.什么是MVVM MVVM(Model-View-ViewModel)是一种软件设计模式,由微软WPF(用于替代WinForm,以前就是用这个技术开发桌面应用程序的)和Si ...

  6. Vue之for列表渲染、methods事件和model表单绑定

    2.4 for列表渲染 文档:https://cn.vuejs.org/v2/guide/list.html v-for指令可以绑定数组的数据来渲染一个项目列表 v-for指令需要使用item in ...

  7. 前端学习(1999)vue之电商管理系统电商系统之分析表单的数据

    目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './components ...

  8. 前端学习(1954)vue之电商管理系统电商系统之重置表单数据

    目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './components ...

  9. 前端学习(1865)vue之电商管理系统电商系统之实现表单的数据绑定

    修改头像位置 3目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './co ...

最新文章

  1. 【MySQL】(万字解析)MySQL表的增删改查(进阶-上)
  2. linux ntptime(Network Time Protocol 网络时间协议)
  3. B端产品如何做好从1到10的架构搭建?
  4. php pjax数据返回,如何将Pjax整合进网站,实现全站无刷新加载?
  5. 史上最简单MySQL教程详解(进阶篇)之索引及失效场合总结
  6. 在一起计时器_奇妙物理·高中篇:打点计时器基本介绍
  7. KindEditor上传图片word
  8. c语言变量常量知识点,嵌入式C语言之变量与常量详解
  9. 个人成长 | 电子设计大赛感受
  10. Swing界面设计工具
  11. MQTT入门2 -- “Error: Invalid password hash for user nick.”和“Connection Refused: not authorised.”...
  12. iOS 视频播放(AVPlayer)
  13. (转)(异常分析) org.hibernate.MappingException: entity class not found
  14. 内部总线、系统总线、外部总线区别
  15. echarts 使用zoom属性的影响
  16. siri语音功能测试点
  17. 人力资源管理中的大数据应用之道
  18. windows xp安装驱动时提示驱动未通过微软数字签名
  19. Python爬虫起步:一步步解决中文乱码显示
  20. jdk8u221-windows-x64下载链接

热门文章

  1. ssms .net3.5_SSMS 18.4中SQL Server查询存储选项
  2. easyui的下拉框combobox在包含的iframe页面里点击不能收回解决办法
  3. [补档]noip2019集训测试赛(八)
  4. 个人作业1——四则运算题目生成程序(基于java)
  5. BZOJ4133 : Answer的排队
  6. MySQL 四种链接
  7. asp.net上传图片,上传图片
  8. 灰色滤镜,网页灰色代码
  9. 原生JS事件中,return false 和 preventDefault() 的区别
  10. script中的event和for的意思