1.v-model:只能使用在表单输入类标签中,即v-model:value 简写:v-model:=“”
因为v-model值对应value
2.data:两种写法
(1)对象式
data:{}
(2)函数式:组件
data:function(){
console.log(this)//vue实例
return{}
}
3.MVVM模型-》VUE
M:模型-data中的数据
V:视图-模板(Dom)
VM:视图模型-Vue实例对象
View->Dom listeners->Model
VM和data中的属性,在模板中都可以使用
4.数据代理-object.defineProperty方法-给一个对象添加属性所使用
数据代理–通过一个对象代理另个对象中属性的操作(读和写)
defineproperty(对象名称,添加的属性名称,{
get(){
return number//当有人读取age属性时,get函数就会被调用,其返回值就是age的值
set(value){//当有人修改person的age的属性值时,set函数就会被调用,且会收到修改的具体值
number = value
}
}
}
)
5.vue中的数据代理
(1)原理:通过vm对象来代理data对象中属性的操作(读和写)
(2)vue中数据dialing的好处:更加方便的操作data中的数据
(3)基本原理:通过Object.defineproperty()把data对象中所有属性添加到vm上,为每一个添加到vm上的属性,都指定一个get()和set(),在其内部操作data对象的属性
6.Vue中的事件修饰符
(1)prevent:阻止默认事件
(2)stop:阻止事件冒泡
(事件冒泡:当一个元素接收到事件的时候,会把他接受的事件传给自己的父级,一直到window)
(3)once:事件只触发一次
7.截取函数.slice(开始index,结束index)
8.根据特殊符号截断字符串.slice(‘-’)
9.computed属性:要用的属性不存在,要通过已有属性计算得来
(1)底层主要借助Object.defineproperty方法提供的get()和set()
(2)get()执行:初次读取会执行一次/当依赖的数据发生改变时回背再次调用
优势:与methods相比,其存在缓存机制,效率更高,调式方便
(3)计算属性最终出现在vm上,直接读取使用即可/计算属性被修改,则必须写set()去响应修改
10.深度检测:‘numbers.b’:{}
(1)vue中的watch默认不检测对象内部值的改变(一层)
(2)配置deep:true可以监测对象内部值的改变(多层)
11.computed与watch对比:
(1)computed能够完成的功能,watch都可以完成
(2)watch完成的功能,computed不一定能够完成,例如:watch可以完成异步操作
提示:
(1)所有被vue管理的函数最写普通函数,纸样this的指向才是vm或者组件实例对象
(2)所有不被vue管理的函数(定时器的回调函数,ajax的回调函数,Promise的回到函数),最好写箭头函数,这样this的指向才是vm或者组件实例对象
12.{{n}}里面的n可以是来data属性,可以是计算属性,也可以是模板的中的标签属性
13.vue中的key的作用?
(1)key是虚拟Dom对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟Dom】,随后Vue进行新的虚拟Dom与旧虚拟Dom的差异对比,规则为:
旧虚拟Dom中找到与新虚拟Dom相同的key:
13.1过滤函数对象.filter(§=>{return p.name.indexOf(val)!=-1//过滤出来的条件})
13.2判断一个字符串是否包含某个字符indexOf(val)
例子:‘abc’.indexOf(‘x’) 返回-1,表示不包含
‘abc’.indexOf(‘a’) 返回0,表示包含且返回字符的索引值
14.排序函数sort()
let arr = [1,3,2,6,4,5]
升序:前减后
arr.sort((a,b)=>{
return a-b
})
15。vue检测数据变化的原理
16.给vue对象后添加属性
(1)Vue.set(target, ‘key’, ‘val’)
(2)vm.
s
e
t
(
t
a
r
g
e
t
,
′
k
e
y
′
,
′
v
a
l
′
)
17.
v
u
e
中没有为数组服务的
g
e
t
(),
s
e
t
()
18.
l
e
t
a
r
r
=
[
]
,
向数组中添加元素到最后的位置,使用
p
u
s
h
,删除最后一元素使用
p
o
p
,删除第一个使用
s
h
i
f
t
,
u
n
s
h
i
f
t
指定位置置换:
s
p
l
i
c
e
,反转
r
e
v
e
r
s
e
,排序
s
o
r
t
19.
向
v
u
e
中的数组添加元素
v
u
e
.
h
o
b
b
y
.
p
u
s
h
(
′
学
习
′
)
;
s
p
l
i
c
e
(
0
,
1
,’打台球‘)
s
p
l
i
c
e
(起始位置,删除元素个数,替换数据)
20.
v
u
e
监视数据的原理:
1.
v
u
e
会监视
d
a
t
a
中所有层次的数据
2.
如何检测对象中的数据:通过
s
e
t
t
e
r
实现检测,且要在
n
e
w
V
u
e
时就传入要检测的数据(
1
)
.
对象中后追加的属性做响应式,
V
u
e
默认不做响应式处理(
2
)
.
如需给后添加的属性做响应式,请使用如下
A
P
I
:
V
u
e
.
s
e
t
(
t
a
r
g
e
t
,
p
r
o
p
e
r
t
y
N
a
m
e
/
i
n
d
e
x
,
v
a
l
u
e
)
v
m
.
set(target, 'key', 'val') 17.vue中没有为数组服务的get(),set() 18.let arr=[],向数组中添加元素到最后的位置,使用push,删除最后一元素使用pop,删除第一个使用shift,unshift指定位置置换:splice,反转reverse,排序sort 19.向vue中的数组添加元素 vue.hobby.push('学习');splice(0,1,’打台球‘)splice(起始位置,删除元素个数,替换数据) 20.vue监视数据的原理: 1.vue会监视data中所有层次的数据 2.如何检测对象中的数据: 通过setter实现检测,且要在new Vue时就传入要检测的数据 (1).对象中后追加的属性做响应式,Vue默认不做响应式处理 (2).如需给后添加的属性做响应式,请使用如下API: Vue.set(target,propertyName/index,value) vm.
set(target,′key′,′val′)17.vue中没有为数组服务的get(),set()18.letarr=[],向数组中添加元素到最后的位置,使用push,删除最后一元素使用pop,删除第一个使用shift,unshift指定位置置换:splice,反转reverse,排序sort19.向vue中的数组添加元素vue.hobby.push(′学习′);splice(0,1,’打台球‘)splice(起始位置,删除元素个数,替换数据)20.vue监视数据的原理:1.vue会监视data中所有层次的数据2.如何检测对象中的数据:通过setter实现检测,且要在newVue时就传入要检测的数据(1).对象中后追加的属性做响应式,Vue默认不做响应式处理(2).如需给后添加的属性做响应式,请使用如下API:Vue.set(target,propertyName/index,value)vm.set(target,propertyName/index,value)
3.如何检测数组中的数据
通过包裹数组更新元素的方法实现,本质就是做了两件数:
(1)通过原生对应的方法对数组进行更新
(2)重新解析模板,进而更新页面
4.在Vue修改数组中的某个元素一定要用如下方法:
(1.)使用这些API:push(),pop(),shift(),unshift(),splice(),sort(),reverse()
(2.)Vue.set()或者vm.
s
e
t
(
)
特别注意:
V
u
e
.
s
e
t
(
)
和
v
m
.
set() 特别注意:Vue.set()和vm.
set()特别注意:Vue.set()和vm.set()不能给VM或者vm的根数据对象添加属性
21.数据劫持
22.收集表单数据:
若,则v-model收集的是value值,用户输入的就是value值
若,则v-model收集的是value值,且要给标签配置value值
若
(1)没有配置input的value值,那么收集的就是checked(勾选or未勾选,是布尔值)
(2)配置input的value属性:
a.v-model的初始值是非数组,那么收集的就是checked(勾选或者未勾选,是布尔值)
b.v-model初始值是数组,那么收集的就是value组成的数组
备注:v-model的三个修饰符:
lazy:失去焦点再收集数据
number:输入字符串转为有效的数字
trim:输入首尾空格过滤