视频地址:【尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通】 https://www.bilibili.com/video/BV1Zy4y1K7SH/?p=13&share_source=copy_web&vd_source=b1cb921b73fe3808550eaf2224d1c155
目录
1、Vue核心
1.1 Vue简介
1.1.1 Vue简介
1.1.1.1 Vue是什么?
1.1.1.2 谁开发的?
1.1.1.3 Vue的特点
1.1.1.4 学习Vue之前要掌握的JS基础知识
1.1.2 Vue官网使用指南
1.1.3 搭建Vue开发环境
1.1.3.1 引入Vue(引入开发版本Vue)
1.1.3.2 安装Vue开发者调试工具
1.1.3.3 关闭生产开发环境提示
1.2 初识Vue
1.2.1 Hello小案例
1.2.2. 分析Hello案例
1.3 模板语法
1.4 数据绑定
1.4.1 单向数据绑定
1.4.2 双向数据绑定
1.5 el和data的两种写法
1.6 MVVM模型 架构模型
1.6.1 MVVM模型
1.6.2 $emit
1.5.3 总结
1.7 数据代理
1.7.1 Object.defineProperty()
1.7.1.1 函数定义
1.7.1.2 枚举/修改/删除 的配置项
1.7.1.2.1 基本配置项
1.7.1.2.2 高级配置项
1.7.2:数据代理
1.7.3:Vue中的数据代理
1.8 事件处理
1.8.1 事件的基本使用
1.8.2 事件修饰符
1.8.3 键盘事件
1.8.4 事件总结
1.9 计算属性与监视
1.9.1 姓名案例
1.9.1.1 插值语法实现
1.9.1.2 methods实现
1.9.2 计算属性
1.9.3 计算属性_简写
1.9.4 天气案例
1.9.5 监视属性 官网改名叫侦听属性
1.9.6 深度监视
1.9.7 监视的简写形式
1.9.8 watch对比computed
1.10 class与style绑定
1.10.1 绑定class样式
1.10.2 绑定style样式
1.11 条件渲染
1.11.1 使用v-show做条件渲染
1.11.2 v-if
1.11.3 v-else-if
1.11.4 v-else
1.11.5 v-if与template标签配合使用
Vue基础
Vue-cli 做工程开发
Vue-router 在Vue中实现前端入门
Vuex 保管数据
element-ui ui组件库
后起之秀:创作者参考了react框架做出了Vue框架。
虚拟DOM就是内存里的一组数据。
Diff算法:新的虚拟DOM与旧的虚拟DOM比较,此为Diff比较,如果新的虚拟DOM中有一部分与旧的虚拟DOM相同,那么相同的部分就会复用。只需要处理后来放进来的虚拟DOM。
vue2:https://v2.cn.vuejs.org/
vue3:简介 | Vue.js
教程和API是重要内容。
API:Vue字典。
风格指南:如何写出优雅的Vue代码
学习Vue的时候,在html页面中,引入vue.js,然后编写vue代码。以后在公司里干活,用高端平台-脚手架Vue-cli.
引入Vue后,多了一个Vue函数
初识Vue
谷歌插件。 Vue Devtools。
首先要准备好一个容器,为什么,因为使用Vue是用来构建界面的,对于Vue构建出来的界面,要摆在什么位置呢,所以得准备一个容器。
强制刷新:shift + 刷新
小常识。
hello, {{name}}!
总结
注意区分 js表达式 和 js代码(语句)
1、表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方
(1) a
(2) a+b
(3) demo(1)
(4) x===y?'a':'b' 三元表达式
js表达式:拿一个变量const x = 在左侧接,都能接到一个值。
2、js语句(代码)不生成值,只控制代码的走向
(1) if(){}
(2) for(){}
(3)
js表达式是一种特殊的js代码,或者是一种特殊的js语句
继续总结
模板的概念:root容器里的代码被称为【Vue模板】
有了模板也就要有模板语法。
目前只学了{{xxx}} 插值语法
何时使用插值语法,何时使用指令语法
实践
1、首先引入vue
模板语法
2、其次准备容器
3、写vue部分的代码
v-bind:单向数据绑定。数据只能从data流向页面。即数据变化,页面上的数据也随之变化。但是页面的数据改变了,vue函数里的对象data中的数据却不随之改变。
v-model:双向数据绑定。数据不仅能从data流向页面,还可以从页面流向data。即数据变化,页面上的数据也随之变化。页面的数据改变,data中的数据也随之改变。
不是所有的数据都适合v-model。
v-model只能应用在表单类元素(输入元素)上,h2等元素是不能用的。
输入类元素:input 单选框 多选框,select,多行输入等表单元素,共同点就是都有value属性。
v-model: value可以简写为v-model,因为v-model默认收集的就是value值。
代码实现:
单向数据绑定:
双向数据绑定:
简写为
单向数据绑定:
双向数据绑定:
const v = new Vue ({
el:'#root', //第一种写法
data:{
name:'尚硅谷'
}
})
console.log(v)
v.$mount('#root') //第二种写法
mount挂载
将容器里写的模板交给vue实例进行解析,解析之后将解析完的内容重新放到页面的指定位置,放官方叫挂载。mount就有挂载的意思。
data:{ // 对象式
name:'尚硅谷'
}
//函数式,函数必须返回一个对象
data: function () {
return {
name:'尚硅谷'
}
}
以后使用到组件,就必须使用data的函数式写法。
另外,在一个对象里写函数,一般就删掉function和冒号,简化为
data() {
console.log(this) // 此处的this为Vue实例对象
return {
name: '尚硅谷'
}
}
总结:
Vue的设计者在最初设计Vue时,就参考了这个模型。
MVVM模型在一堆数据和一堆DOM结构中间做了连接,它起到中间桥梁纽带作用。其实前端主流框架都是这个思想,数据放在要求的位置,然后写出模板代码,具体数据如何插入到模板中,就需要学习框架的语法,什么指令啊插值语法啊。然后框架开始工作,就可以将数据和模板建立起来连接。
ViewModel简称vm,vm是Vue实例对象。
因此以后用vm去接收Vue实例。
const vm = new Vue({
el: '#root', //第一种写法
data:{ // 对象式
name:'尚硅谷'
}
})
Object.defineProperty() 给对象定义属性(ES6)
举例
与下面的区别在哪呢
let person = {
name: '张三',
gender: '男',
age:'18'
}
注意,使用Object.defineProperty()添加的属性,是不可以被枚举(遍历)的。
Object.keys(对象名)以数组的形式返回对象所有属性的属性名,
1.使用创建对象的时候添加属性,其属性为
2.使用Object.defineProperty()添加属性,遍历不到Object.defineProperty()添加的age属性
此即为不可枚举(说白了就是不能遍历)。
当然使用for-in也可以证明Object.defineProperty() 添加的属性不可枚举
// 遍历person对象的所有属性值
for(let key in person) {
console.log(person[key],',')
}
Object.defineProperty(person, 'age', {
value:18,
enumerable:true,
writable:true,
configurable:true
})
let number = 19
Object.defineProperty(person, 'age', {
// 当读取age属性时,get就会被调用,且返回值就是age的值
get:function () {
return number
}
})
同时还有set函数,当修改age属性时,set函数(setter)就会被调用,且参数是修改的值。
let number = 19
Object.defineProperty(person, 'age', {
// 当读取age属性时,get就会被调用,且返回值就是age的值
get:function () {
return number
}
set(value) {
number = value
}
})
案例
学校名称: {{name}}
学校地址: {{address}}
结果
可以看出,vm有对name和address的一组getter和setter。此即为数据代理。
通过vm读写name和address,就是读写data中的name和address,示意图如下。
数据代理图示
vm数据代理,方便编码。
欢迎来到{{name}}学习
showInfo(event) {
console.log(event.target.innerText) //点我提示信息
// alert("同学你好")
}
总结:
案例
点我提示信息
showInfo函数
methods: {
showInfo(e) {
e.preventDefault()
alert("同学你好")
}
}
因为点击的是a标签,在弹出弹框点击确定后,会跳转到href网址,因此在showInfo里添加e.preventDefault()可以阻止跳转。
方案2
也可以阻止这个默认事件。
此处@click后面的prevent就是事件修饰符。
p15 后面的没怎么听
案例
一个input框
showInfo事件
showInfo(e) {
// 按下回车才打印输入的值,回车的keyCode是13
if(e.keyCode !== 13) return
console.log(e.target.value)
}
效果
只有按下回车才在控制台打印输入值,if(e.keyCode !== 13) return。
然后只需要在键盘事件后加一个修饰,就代表回车了。
姓
名
全名:{{firstName.slice(0,3)}}-{{lastName}}
效果
但是,这里对于firstName的截取,在{{}}内有点复杂了,下面用methods实现。
data中的数据发生改变,那么Vue就会重新解析模板。
接下来就是计算属性,见1.7.2。
计算属性的setter,可以不写,如果计算属性以后会被修改,那么加上setter
set(value) {
const arr=value.split('-')
this.firstName = arr[0]
this.lastName = arr[1]
}
计算属性总结:
完整形式
computed:{
// 完整形式
fullName:{
get(){
return this.firstName + '-' + this.lastName
},
set(value) {
const arr=value.split('-')
this.firstName = arr[0]
this.lastName = arr[1]
}
}
}
简写
如图所示,绿色其实就是getter。红色就是计算属性的名。
代码
今天天气很{{info}}
结果
点击按钮,切换天气。
进一步简化代码,不用methods的函数了,直接在模板里面实现逻辑。因为切换天气,功能很单一,所以可以这样写。
watch: {
isHot: {
immediate: false,
handler (newValue, oldValue) {
}
}
}
vm.$watch('isHot', {
handler (newValue, oldValue) {
}
})
跳过 p23
当watch配置项里只有handler()时才可以简写。
完整形式
watch: {
isHot: {
handler (newValue, oldValue) {
}
}
}
或者写法2
vm.$watch('isHot', {
handler (newValue, oldValue) {
}
})
简写形式
watch: {
isHot(newValue, oldValue) {
}
}
或者
vm.$watch('isHot', function (newValue, oldValue) {
})
p25 跳过。
将前面的姓名案例,用监视属性实现。
监视姓和名。
看了一半,没有记笔记。
{{name}}
解读
从上向下就是123
1 代码就是动态地指定class,class的值需要读取mood,mood在Vue里。点击事件触发后,mood的值会变为happy,即class会变为happy。
案例升级——mood随机
changeMood() {
// this.mood = 'happy'
const arr = ['happy', 'sad', 'normal']
const index = Math.floor(Math.random()) //生成[0,1)的随机数
this.mood = arr[index]
}
案例继续升级——添加多个类名
{{name}}
new Vue({
el:'#root',
data: {
name:'尚硅谷',
mood:'normal',
classArr:['atguigu1', 'atguigu2','atguigu3']
},
案例继续升级——要添加的类名个数确定
{{name}}
new Vue({
el:'#root',
data: {
name:'尚硅谷',
mood:'normal',
classObj: {
atguigu1: false,
atguigu2: true
}
},
样式的绑定除了用class,还可以用style内联样式。
代码
注意:style里的字体大小是font-size,在Vue里要写成fontSize,即驼峰式
{{name}}
new Vue({
el:'#root',
data: {
name:'尚硅谷',
mood:'normal',
styleObj: {
fontSize:'40px'
},
}
}
像color等style,在Vue直接写color,但是像短横线的,就要改成驼峰式的。
{{name}}
el:'#root',
data: {
name:'尚硅谷',
mood:'normal',
styleArr: [
{
fontSize:'40px'
},
{
color:'40px'
}
],
数组里面放的就是样式的对象。
顾名思义:符合了某些条件,然后给你渲染某些东西。主要就是几个指令的使用。
要div时而显示时而隐藏。
如果用原生去实现,可以display:none或者透明度为0或者visibility为hidden。
但是Vue中指令v-show,底层实现就是调整display属性。
代码
欢迎来到{{name}}
v-show里是个表达式也可以,比如v-show=" 1=== 3".
v-if为false,这个节点本身也就不存在,这是与v-show的不同之处。v-show只是控制节点不显示,本质还是存在的。
欢迎来到{{name}}
如果切换频率高,建议使用v-show。v-if涉及到在DOM添加/删除节点,因此不适用于切换频率高的操作。
比三个if效率要高一些。
欢迎来到{{name}}
欢迎来到{{name}}
欢迎来到{{name}}
v-else就是最后if elseif else里的else作用。
欢迎来到{{name}}
欢迎来到{{name}}
欢迎来到{{name}}
欢迎来到{{name}}
v-if v-else-if v-else中间不允许被打断,也就是不允许被插入其他语句。
欢迎来到{{name}}
欢迎来到{{name}}
欢迎来到{{name}}
欢迎来到{{name}}
本来只是四个h2,但是为了将他们包在一起,所以多了个div。
更好的办法,使用template,模板,最大的特点是hi不影响结构。最终渲染的时候,红色框里的东西会消掉。
注意: template只能配合v-if使用,不能与v-show使用。
下面的xxx是表达式
配置hosts文件
Windows 系统添加和修改 hosts 绑定的方法-阿里云开发者社区 (aliyun.com)