这里我收集了一些vue面试问到的知识点,通过查看网站上对应的内容,对这些内容归纳总结:
1.vue中的指令:
1.v-bind简写":"
2.v-model实现数据双向绑定
3.v-on 简写$,绑定函数
4.v-if,v-else,v-else-if 判断条件
5.v-show 通过设置display:none和display:block控制dom元素显示隐藏
6.v-text 将字符串覆盖到标签内容中,不会解析字符串中的标签
7.v-html 将字符串覆盖到标签内容中,会解析字符串中的标签
8.v-for 循环遍历数组
此外还有:v-pre,v-cloak, v-once
2.指令v-model的原理:
<input v-model="price">
本质上等于:
<input type="text" :value="price" @input="price=$event.target.value">
通过input标签的input事件进行绑定,使用的是v-bind指令和input语法糖实现数据更新
在组件上使用v-model时:
父组件:
<template>
<child v-model="name"></child>
</template>
子组件:
<template>
<input v-model="name" @input="$emit('input',$event.target.value)"/>
</template>
export default {
props:{
value:String
},
data(){
return {}
}
但是对于checkbox,radio这些标签使用input事件就不太适合了,这时候就必须使用新的触发事件,vue提供了model来绑定新的事件
父组件:
<template>
<child v-model="checked"></child>
</template>
子组件:
<template>
<input type="checkbox" v-model="checked" @change="$emit('change',$event.target.checked)"/>
</template>
export default {
model:{
prop:'checked', //绑定prop中的数据
event:'change' //绑定事件
},
props:{
checked:Boolen
},
data(){
return {}
}
3.自定义指令
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
inserted: function (el) { // 当被绑定的元素插入到 DOM中时……
// 聚焦元素
el.focus()
} })
如果想注册局部指令,组件中也接受一个 directives 的选项:
directives: {
focus: {
// 指令的定义
inserted: function (el) {
el.focus()
}
}
}
然后你可以在模板中任何元素上使用新的 v-focus property,如下:
<input v-focus>
一个指令定义对象可以提供如下几个钩子函数 (均为可选):
bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode
更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。unbind:只调用一次,指令与元素解绑时调用
。