p1 课程简介
p2 vue简介
p03 vue官网使用指南
p04 搭建vue开发环境
下载vscode
下载vue.js
安装dev-tools
p05 HELLO小案例
安装插件
浏览器打开
有个报错 找不到图标
因为插件会开启一个服务器,需要在目录里面添加图标
添加一个图标
插值表达式
p06 分析hello案例
p07模版语法
指令语法
p08 数据绑定
v-bind 单向绑定 v-model双向绑定
p09 el与data的两种写法
p10 理解 mvvm
p11 Object.defineProperty
给person对象定义age属性,并且把age和number关联起来
p12 理解数据代理
p13 vue中的数据代理
_data和data其实是相同的
重要
p14 事件处理
p15 事件修饰符
p16 键盘事件
p17 事件总结
p18姓名案例
可以使用插值表达式,也可以使用下面这种方法
p19计算属性
<body>
<div id="root">
姓:<input type="text" v-model="firstname">
<br>
名:<input type="text" v-model="lastname">
<br>
全名:<span>{{fullName}}</span>
</div>
<script type="text/javascript">
Vue.config.productionTip = false
const vm = new Vue({
el: "#root", //第一种挂载容器方式
data: {
firstname: '张',
lastname: '三',
age:'12'
},
computed: {
fullName: {
//获取fullName的值的时候,会自动调用get方法
get() {
console.log('get方法调用了')
return this.firstname + '-' + this.lastname
},
//当修改fullName会自动调用set这个方法
set(param) {
console.log('set方法调用了')
const arr = param.split('-')
this.firstname = arr[0]
this.lastname = arr[1]
}
}
}
})
</script>
</head>
</body>
p20 计算属性 简写
p21 天气案例
p22 监视属性
另外一种写法
p23深度监视
<body>
<div id="root">
<h2>今天天气很{{info}}</h2>
<button @click="changeWeather">切换天气</button>
<button @click="numbers.a++">a++</button>
<button @click="numbers.b++">b++</button>
</div>
<script type="text/javascript">
Vue.config.productionTip = false
const vm = new Vue({
el: "#root", //第一种挂载容器方式
data: {
isHot:true,
numbers:{
a:1,
b:2
}
},
methods: {
changeWeather(){
this.isHot=!this.isHot
}
},
computed: {
info:{
get(){
return this.isHot?'炎热':'凉爽'
}
}
},
//监视isHot属性
watch:{
isHot:{
immediate:true,//初始化的时候 调用一下
//isHot发生变化时候,方法被调用
handler(newVal,oldVal){
console.log('isHot被修改了',newVal,oldVal)
}
},
//监视a属性
'numbers.a':{
handler(newVal,oldVal){
console.log('number.a被修改了',newVal,oldVal)
}
},
//深度监视numbers整体
numbers:{
deep:true,
handler(newVal,oldVal){
console.log('number被修改了',newVal,oldVal)
}
}
}
})
</script>
</head>
</body>
p24 监视的简写形式
简写前提:除了handler方法 没有其他结构
p25 watch对比computed
p26 绑定class样式
其他绑定样式的方法
p27 绑定style样式
p28条件渲染
p29 列表渲染
p30 key作用与原理
遍历时候,key属性尽量使用id而不是index
p31 列表过滤
实现模糊查询的效果
监视属性实现
计算属性实现
<div id="root">
<h2>人员列表</h2>
<!-- //遍历数组 -->
<!-- key是绑定一个唯一属性 -->
<input type="text" v-model="keyword">
<ul>
<li v-for="(p,index) in filerPersons" :key="p.id">
{{p.id}}---{{p.name}}---{{index}}
</li>
</ul>
</div>
<script type="text/javascript">
Vue.config.productionTip = false
const vm = new Vue({
el: "#root",
data: {
keyword:"",
persons: [
{ id: "001", name: "马冬梅", age: "18" },
{ id: "002", name: "周冬雨", age: "19" },
{ id: "003", name: "周杰伦", age: "20" }
],
},
computed: {
filerPersons(){
return this.persons.filter((p)=>{
return p.name.indexOf(this.keyword)!==-1
})
}
}
})
</script>
p32 列表排序
p33 更新时的一个问题
p34 vue监测数据的原理-对象
简单手写模拟vue
p35 Vue.set()方法
场景:需要添加一个不存在的属性
另外一种语法
缩写
但是.这个set方法有个限制,不能直接在data上添加属性,而是要在data下的属性内部添加.
p36 vue监测数据的原理-数组
改变数组中的某个元素
vue里面的数组的push等方法并不是原生的数组push,而是包装过的
往数组头部添加元素
也可以直接使用vue的set方法
p37 总结 vue监视数据
不能直接修改数组的某一个元素,但是可以修改数组某个元素的属性,
原因:从下图可以看出,数组的0索引元素这个对象的 属性 是有get和set方法的,可以直接修改,但是不能直接替换0索引位置元素(因为数组元素本省没有get和set方法,而数组里元素对象的属性有get和set方法,这样可以感知到对象属性发生了变化)
不支持**this.student.friend[0]={}**这种语法,但是支持下面这种修改内部属性
总结:
p38 收集表单数据
p39 过滤器
p40 v-text指令
p41 v-html指令
p42 v-cloak指令
场景:有时候js网速过慢,还没加载过来 就展示在页面那些标签了,v-clock作用:js加载完成后去除这个属性
p43 v-once指令
p44 v-pre指令
p45 自定义指令-函数式
p46 自定义指令-对象式
由上面课件,自定义指令不仅可以使用对象格式,也可以使用函数类型
p47 自定义指令-总结
多个单词指令名写法
自定义指令的this是windows对象
全局指令(与全局过滤器类似写法)
总结: