学习Vue最好的方式:查看官网文档 Vue.js - 渐进式 JavaScript 框架 | Vue.js
1.1-Vue介绍
-
(1)Vue是什么?
-
js框架
-
-
(2)Vue干什么用的?
-
构建用户页面(数据渲染到页面)
-
-
(3)有什么特点?
-
渐进式
-
1.2-Vue两个重要特点
1-数据驱动
1.数据驱动 :Vue会根据数据,自动渲染页面
-
无需DOM操作,修改了对象中的数据,页面会自动渲染
-
Vue的底层使用了一种叫做虚拟DOM的技术,能够实时监听js对象的属性变化从而自动更新页面DOM元素
-
虚拟DOM本质是一个js对象
-
2-组件化开发(盒子复用)
2.组件化开发 : 网页中的某一个部分,可能需要在多个地方被重复使用,就可以定义成一个组件
组件化开发好处: a. 一次定义,多处使用 便于开发维护
类似于我们之前的函数封装解决代码冗余问题。Vue.js可以把网页的某一个部分(HTML+CSS+JS)封装成一个组件
1.3-Vue基本使用
-
官方文档传送门:Vue官方文档
-
第三方框架通用的使用步骤
-
1.导包
-
2.写HTML结构
-
3.js中初始化配置
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 1.导包 -->
<script src="./vue.js"></script>
</head>
<body>
<!-- 2.HTML结构 -->
<div id="app">
{{ message }}
<br>
{{ name }}
<br>
{{ age }}
<br>
{{ sex }}
</div>
<script>
/* 3.初始化配置 */
/*
(1)Vue是导入vue.js之后得到的一个全局构造函数
(2)调用Vue构造函数 创建一个vue实例对象
*/
let app = new Vue({
//el: element 用来设置vue实例的挂载点(将数据渲染到哪个元素身上)
el: '#app',
//data: 要渲染的数据
/* 数据驱动:vue会根据data中的数据,自动渲染页面(无需DOM操作) */
data: {
message: 'Hello Vue!',
name:'小白',
age:22,
sex:'女'
}
})
</script>
</body>
</html>
1.4-Vue的挂载点介绍
-
el挂载点官方文档传送门:https://cn.vuejs.org/v2/api/#el
-
1.挂载点
el
作用 : 告诉vue实例,你要将data中的数据渲染到哪一个视图 -
2.
注意点
-
(1)挂载点可以使用 id选择器(vue推荐使用) 类选择器 标签选择器
-
开发中基本上都是id选择器,保证HTML标签唯一性
-
如果你希望data中的数据能够对多个元素生效,可以将vue实例挂载到父元素中
-
-
(2)如果选择器选中了多个元素,只会选择第一个元素
-
(3)挂载点不能设置为html和body标签 (程序报错)
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 1.导包 -->
<script src="./vue.js"></script>
</head>
<body>
<!-- 2.HTML结构 -->
<div id="xb">
<div id="app">
{{ message }}
</div>
<hr>
<div id="box" class="container">
{{ message }}
</div>
<hr>
<div class="container">
{{ message }}
</div>
</div>
<script>
/* 3.初始化配置 */
/*
(1)Vue是导入vue.js之后得到的一个全局构造函数
(2)调用Vue构造函数 创建一个vue实例对象
*/
let app = new Vue({
//el: element 用来设置vue实例的挂载点(将数据渲染到哪个元素身上)
/*
(1)挂载点可以使用 id选择器(vue推荐使用) 类选择器 标签选择器
(2)如果选择器选中了多个元素,只会选择第一个元素
(3)挂载点不能设置为html和body标签 (程序报错)
*/
el: '#xb',
//data: 要渲染的数据
/* 数据驱动:vue会根据data中的数据,自动渲染页面(无需DOM操作) */
data: {
message: 'Hello Vue!'
}
})
</script>
</body>
</html>
1.5-Vue的插值表达式介绍
插值表达式(模板语法)官网文档传送门:模板语法 — Vue.js
1.Vue会自动将data对象中的数据渲染到视图
2.在视图中,使用插值表达式来告诉vue,你想把数据渲染在什么位置
3.关于插值表达式一些注意点
(1) {{ }}
: 插值表达式,也叫胡子语法
(2) 插值表达式作用:将数据渲染到页面
(3) 支持二元运算 {{ age + 1 }}
(4) 支持三元运算 {{ age>30?'老男人':'小鲜肉' }}
(5) 支持数组与对象的取值语法
(6) 不支持分支语法与循环语法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 1.导包 -->
<script src="./vue.js"></script>
</head>
<body>
<!-- 2.HTML结构 -->
<div id="app">
名字: {{ name }} <br>
年龄: {{ age + 1 }} <br>
介绍: {{ age>30?'大叔':'欧巴' }} <br>
女朋友:{{ girlFried[1] }} <br>
女儿: {{ daughter.name }} <br>
</div>
<script>
/* 3.初始化配置 */
/*
(1)Vue是导入vue.js之后得到的一个全局构造函数
(2)调用Vue构造函数 创建一个vue实例对象
*/
let app = new Vue({
//el: element 用来设置vue实例的挂载点(将数据渲染到哪个元素身上)
/*
(1)挂载点可以使用 id选择器(vue推荐使用) 类选择器 标签选择器
(2)如果选择器选中了多个元素,只会选择第一个元素
(3)挂载点不能设置为html和body标签 (程序报错)
*/
el: '#app',
//data: 要渲染的数据
/* 数据驱动:vue会根据data中的数据,自动渲染页面(无需DOM操作)
(1) {{ }} : 插值表达式,也叫胡子语法
(2) 插值表达式作用:将数据渲染到页面
(3) 支持二元运算 {{ age + 1 }}
(4) 支持三元运算 {{ age>30?'老男人':'小鲜肉' }}
(5) 支持数组与对象的取值语法
(6) 不支持分支语法与循环语法
*/
data: {
message: 'Hello Vue!',
name: 'xiaobai',
age: 22,
sex: '女',
girlFried:['代码','学生','咖啡'],
daughter:{
name:'嘟嘟',
age:1
}
}
})
</script>
</body>
</html>
02-Vue指令
指令名称 | 指令作用 | 示例 | 简写形式 |
---|---|---|---|
v-text | 设置元素的innerText | v-text="111" | 无 |
v-html | 设置元素的innerHTML | v-html="<p>111</p>" | 无 |
v-on | 给元素绑定事件 | v-on:click="doClick" | @click="doClick" |
v-bind | 设置元素的原生属性 | v-bind:src="./logo.png" | :src="./logo.png" |
v-for | 列表渲染 | <li v-for=(item,index) in list></li> | 无 |
1.1-Vue指令介绍
Vue指令官网文档传送门:https://cn.vuejs.org/v2/api/#v-text
1.Vue指令的本质是
: Vue为HTML标签新增的一些属性
a. 每一个HTML标签都有自己的原生默认属性
HTML标签的每一个属性都有自己独特的功能
例如 img标签的src属性,a标签的href属性
b. Vue认为,HTML标签原生的属性还不够用,所以Vue为HTML标签新增了很多的属性,每一个属性(指令)都可以实现一个强大的功能
2.在Vue中每一个指令都是以v-
开头 (用于区分HTML标签原生属性)
语法 : 指令名=“指令值”
例如 v-text = msg
3.使用Vue的指令,就像使用HTML标签原生的属性一样去使用即可。
<img src="./images/logo.png" alt="图片不存在时的文本" title="鼠标悬停文本" v-on:click = "doClick"> |
---|
src" : 原生属性,设置图片的路径 |
alt : 原生属性 ,设置图片不存在时的文本 |
title :原生属性,设置鼠标悬停文本 |
v-on:click :vue给img标签新增的属性, 给元素绑定点击事件 |
1.2-v-html指令
v-html指令官方文档传送门:https://cn.vuejs.org/v2/api/#v-html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 导包 -->
<script src="./vue.js"></script>
</head>
<body>
<!-- HTML结构 -->
<div id="app">
<p v-text="msg">张三</p>
<p v-text="msg1">李四</p>
<p v-html="msg1">王五</p>
</div>
<!--
v-html 指令
作用: 设置元素的innerHTM
-->
<script>
/* 创建vue实例 */
let app = new Vue({
//el:挂载点
el: '#app',
//data: 要渲染的数据
data: {
msg: '我是xb!',
msg1:'<h1>哈哈哈</h1>'
}
})
</script>
</body>
</html>
1.3-v-on指令(绑定事件)
1.3.1- v-on基本使用
v-on指令官方文档传送门:https://cn.vuejs.org/v2/api/#v-on
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 导包 -->
<script src="./vue.js"></script>
<style>
.box {
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<!-- HTML结构 -->
<div id="app">
<button v-on:click="doClick">点我</button>
<div class="box" v-on:mouseenter="doEnter" v-on:mouseleave="doLeave"></div>
<hr>
<div class="box" @mouseenter="doEnter" @mouseleave="doLeave"></div>
</div>
<!--
v-on 指令
a.作用: 给元素绑定事件
b.语法:
标准语法:v-on:事件名 = "方法名"
简洁语法:@事件名 = "方法名"
c.注意点
事件名就是原生事件名去掉on
事件方法定义在vue实例的methods对象中
-->
<script>
/* 创建vue实例 */
let app = new Vue({
//el:挂载点
el: '#app',
//data: 要渲染的数据
data: {
},
//method:注册事件的方法名
methods: {
doClick() {
alert('我被点击了')
},
doEnter() {
console.log('鼠标移入我了')
},
doLeave() {
console.log('鼠标移出我了')
}
},
})
</script>
</body>
</html>
1.3.2- vue事件修饰符
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 导包 -->
<script src="./vue.js"></script>
<style>
.father{
width: 300px;
height: 300px;
background-color: #f00;
}
.son{
width: 100px;
height: 100px;
background-color: #0f0;
}
</style>
</head>
<body>
<!-- HTML结构 -->
<div id="app">
<div class="father" @click.once="fatherClick">
我是father
<div class="son" @click.stop="sonClick">我是son</div>
</div>
<form action="http://www.itheima.com">
<button @click.prevent="doSubmit">点我啊</button>
</form>
<!-- 输入框 : enter键 -->
<!-- <input type="text" @keyup.13="doUp"> -->
<!-- 用enter,易读 -->
<input type="text" @keyup.enter="doEnter">
</div>
<!--
事件修饰符
a.作用: 限定事件触发行为(例如阻止冒泡,阻止默认行为等)
b.语法: @事件名.修饰符 = "方法名"
-->
<script>
/* 创建vue实例 */
let app = new Vue({
//el:挂载点
el: '#app',
//data: 要渲染的数据
data: {
},
//method:注册事件的方法名
methods: {
fatherClick () {
console.log('我是父元素');
},
sonClick () {
console.log('我是子元素');
},
doSubmit () {
console.log('提交按钮');
},
doEnter(){
console.log('按了enter键')
}
},
})
</script>
</body>
</html>
1.3.3- vue方法中的this
-
1.vue事件方法中的this指向 :
vue实例
-
2.vue事件方法中访问data对象中的成员 :
this.属性名
-
vue会将data对象与methods对象中的成员
平铺
到 vue实例中
-
-
3.注意点: 如果事件处理代码没有写到methods中,而是写在行内则不需要this 就可以访问data对象中的成员
1.3.4- vue事件传参
1.vue中每一个事件方法都有一个默认参数 , 就是事件对象
2.如果主动给事件传参,则传递的参数 会 覆盖默认参数
3.如果希望同时传入事件对象
+ 自定义参数
,则可以使用 $event
v-on:click="doClick($event,自定义参数)"
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 导包 -->
<script src="./vue.js"></script>
<style>
.box{
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<!-- HTML结构 -->
<div id="app">
{{ msg }}
<div class="box" @click="boxClick(10)"></div>
<br>
<span v-text="news.title"></span>
<button @click="deleteClick(news.id)">删除</button>
<button @click="editClick($event,news.id)">编辑</button>
</div>
<script>
/* 创建vue实例 */
let app = new Vue({
//el:挂载点
el: '#app',
//data: 要渲染的数据
data: {
msg: '我是zyx!',
news:{
title:'嘟嘟嘟',
id:10
}
},
methods: {
/*
1.vue中每一个事件方法都有一个默认参数 , 就是事件对象
2.如果主动给事件传参,则传递的参数 会 覆盖默认参数
3.如果希望 传递事件对象 + 自定义参数, 则可以使用 $event
*/
boxClick(e){
console.log(e)
},
deleteClick(id){
console.log(`id为${id}的文章被删除`);
},
editClick(e,id){
console.log(e)
console.log(id)
}
},
})
</script>
</body>
</html>
1.4-v-bind指令 (绑定标准属性的值)
v-bind指令官网文档传送门:https://cn.vuejs.org/v2/api/#v-bind
默认情况下,HTML标签原生属性
无法获取vue中的数据
如果希望原生属性
也可以获取vue中的数据,就可以使用v-bind指令
1.4.1-v-bind指令基本使用
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 导包 -->
<script src="./vue.js"></script>
</head>
<body>
<!-- HTML结构 -->
<div id="app">
<!--
默认情况下,HTML标签原生属性无法获取vue中的数据
如果希望原生属性也可以获取vue中的数据,就可以使用v-bind指令
-->
<img v-bind:src="imagePath" v-bind:title="imageTitle" alt="">
</div>
<!--
v-bind 指令
a.作用: 设置HTML标签原生属性的值
b.语法:
标准语法:v-bind:原生属性名 = "属性值"
简洁语法::原生属性名 = "属性值"
-->
<script>
/* 创建vue实例 */
let app = new Vue({
//el:挂载点
el: '#app',
//data: 要渲染的数据
data: {
imagePath:'./images/logo.png',
imageTitle:'早早早'
}
})
</script>
</body>
</html>
1.4.2-vue样式绑定
class与style样式绑定官方文档传送门:Class 与 Style 绑定 — Vue.js
v-bind
可以简写成 :
v-bind:class="{ '类名': bool, '类名': bool ......}"
如果值为true 该类样式就会被应用在元素身上, false则不会
注意点:如果类名有 - ,则需要使用引号包起来
1.5-v-for指令(列表渲染)
v-for指令官方文档传送门:列表渲染 — Vue.js
遍历数组语法:v-for="(value,index) in arr"
value:数组元素
index:数组下标
遍历对象语法:v-for="(value,key,index) in obj"
-
该语法使用较少,了解即可
-
value:对象属性值
-
key:对象属性名
-
index:下标
1.6-v-model指令(双向数据绑定)
1.6.1-双向数据绑定基本使用
v-model指令官方文档传送们:https://cn.vuejs.org/v2/api/#v-model
`v-model只能用于表单元素!
` `v-model只能用于表单元素!
` `v-model只能用于表单元素!
`
双向数据绑定
表单元素的值进行了修改,这个变量的值也会跟着修改
这个变量的值进行了修改,表单元素的值也会跟着修改
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 导包 -->
<script src="./vue.js"></script>
<style>
span{
font-size: 20px;
color: red;
}
</style>
</head>
<body>
<!-- HTML结构 -->
<div id="app">
<input type="text" v-model="name">
<p>我的名字是: <span>{{ name }}</span></p>
<button @click="doClick">点我修改model</button>
</div>
<!--
v-model 指令
双向数据绑定
a. 表单元素的值进行了修改,这个变量的值也会跟着修改
b. 这个变量的值进行了修改,表单元素的值也会跟着修改
v-model="变量名"
a. v-model只能用于表单元素
b. 变量名要定义在data对象中
-->
<script>
/* 创建vue实例 */
let app = new Vue({
//el:挂载点
el: '#app',
//data: 要渲染的数据
data: {
name:''
},
methods: {
doClick(){
this.name = 'zzz'
}
},
})
</script>
</body>
</html>
1.6.2-双向数据绑定的意义
双向数据绑定的意义
可以让我们快速
的得到
表单元素的值
可以让我们快速
的设置
表单元素的值
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 导包 -->
<script src="./vue.js"></script>
</head>
<body>
<!-- HTML结构 -->
<div id="app">
登陆框: <input type="text" v-model="username" placeholder="请输入用户名">
<br>
密码框: <input type="password" v-model="password" placeholder="请输入密码">
<br>
<button @click="loginClick">登录</button>
</div>
<script>
/* 创建vue实例 */
let app = new Vue({
//el:挂载点
el: '#app',
//data: 要渲染的数据
data: {
username:'',
password: ''
},
methods: {
loginClick(){
//修改了表单元素 -> 修改了password
if(this.password != '123456'){
alert('密码错误,请重新输入')
//修改password -> 修改了表单元素的值
this.password = ''
}
}
},
})
</script>
</body>
</html>
喜欢的可以点个赞哟!