首先创建一个简单的vue应用
# 全局安装 vue-cli
$ npm i -g vue-cli
# 创建一个简单的vue仓库
$ vue init webpack-simple learnvue
# 安装依赖
$ cd learnvue
$ npm i
$ npm run dev
class绑定——动态地切换class
- 在:class上绑定一个对象
- 在:class上绑定一个对象名
- 在:class上绑定一个返回对象的计算属性
- 在:class上绑定一个数组,数组语法中也可以使用对象语法
- 三元表达式:根据条件切换列表中的class
注意:普通class和绑定class可以共存
{{msg}}
我是header,我有一个普通class和一个可能存在的class对象
我是main,我有一个普通class和一个可能存在的class对象
我是小字,我有背景色
我是大字,没有背景色
我始终是红色字,可能是大字也可能是小字,有或者没有绿色背景
我现在是大字且为红色,没有背景色
我是红字
style绑定——绑定内联样式
- 看着很像css内联样式,属性名可用驼峰式或用短横线分隔,短横线分隔要用单引号引起来
- 直接绑定到一个样式对象
- 结合计算属性使用
- 数组语法
当 v-bind:style
使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform
,Vue.js 会自动侦测并添加相应的前缀。
{{msg}}
hello world
hello dot
hello dolby
hello dolby
vue不得不说的生命周期
当一个vue实例被创建时,它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。
看下图:
一个实例的生命周期分为creat、mount、update、destroy四个阶段,它们的分工各有不同:
- create:创建
- mount:挂载DOM
- update:数据更新
- destroy:销毁(一般为手动清理事件和定时器)
同时在这些过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。对应生命周期来看,又有以下8个钩子:
beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed。
看一个例子:
{{msg}}
打开localhost:8080,页面显示初始msg内容,控制台打印beforeCreate、created、beforeMount、mounted
大约1s之后,页面内容发生变化,紧接着watch生效,控制台一次打印出hello,beforeUpdate,updated,这里没有打印出beforeDestroy和destroyed是因为页面上没有事件。
v-model
单行文本
v-model 指令用于在表单 及
元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
以上代码的效果是页面上会出现一个input输入框且有初始值value
当我们在input中使用v-model用于绑定数据时,value值不生效
v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源。如果有需要,我们应在组件的 data 选项中声明初始值。
现在结合前面学到的看一段代码:
Message is: {{message}}
我们为input定义了一个placeholder值为'edit me'并绑定了一个message属性
首先看input里绑定的message和p中message之间的关系,前面说v-model双向绑定不过是语法糖,实际上还是单向绑定。
当input中的内容发生变化,也就是input中绑定的message——来自于data中的message属性值发生了变化,p中的message也会随之改变,所以数据改变是单向的从data中的message属性到页面上的message属性变换的过程。所以p中的文本会随着input中的内容改变而改变。
我们再来看看data中的另一个属性'isClick',我们给它赋值为一个空的字符串,即布尔值false
继续看代码,在button按钮上定义了一个单击事件'clickBtn',在p元素上绑定了一个内联样式'styleObj',我们把样式对象放在computed中,这样就会返回计算后的属性对象。当用户点击按钮时,如果input中有输入,我们将'isClick'值设为true,反应在页面上就是输入不为空的情况下点击按钮之后p元素有了黄色背景,字色变为红色。
多行文本
Multiline message is:
{{ message }}
在文本区域插值 () 并不会生效,应用 v-model 来代替。
复选框
- 单个复选框绑定到布尔值
- 多个复选框绑定到同一数组
Checked names: {{ checkedArr }}
绑定到checkedArr中的值是input中的value
单选按钮
picked names: {{ picked }}
选择框
- 单选时
Selected: {{ selected }}
如果 v-model 表达式的初始值未能匹配任何选项, 元素将被渲染为“未选中”状态。这种情况下iOS 不会触发 change 事件,这会使用户无法选择第一个选项。因此推荐像上面这样提供一个值为空的禁用选项。
- 多选时
SelectedArr: {{ selectedArr }}
用v-for渲染的动态项
Selected: {{ selected }}
以上代码在http://localhost:8080/中打开后,页面正常显示数据,接着先弹出hello
点击确定后msg值变为setTimeout中的12121212
在输入框中输入任意内容,answer值变为我们设定的字符串