erp-dome/doc/面试学习笔记1
2024-08-23 11:07:11 +00:00

239 lines
5.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

lession 1、插值表达式、指令、动态属性、v-html
{{name}}
<p :id="did"></p>
<div v-html="html">
<p>我是哈默</p>
</div>
v-html 会造成xss攻击
lession 2、计算属性
会做数据缓存
double2:{
get(){
return this.number*2 //原值改变,计算属性改变
},
set(value){
this.number=value/2 //计算属性改变,原值还原
}
}
lession 3、watch监听器-用来监听数值的变化
data(){
return{
name:'哈默',
info:{
hobby:'篮球'
}
}
}
watch:{
//字符串监听
name(newVal,oldVal){
console.log('name',newVal,oldVal);
},
//对象数据的监听
info:{
handler:function(newVal,oldVal){
console.log('info',newVal,oldVal)
},
deep:true //深度监听开关
}
}
lession 4、动态绑定 Class 和 Style
对象方式动态绑定样式
<li class="item" :class="{'active':isActive}">项目1</li>
数组方式绑定样式
<li class="item" :class="['active']">项目1</li>
行内样式动态绑定
<li class="item" :style="styleData">项目1</li>
data(){
return {
isActive:true,
styleData:{
background:'#efefef',
color:'#ffffff'
}
}
}
lession 5、v-if 和v-show 的区别
<p v-if="data==='a'"> a(v-if) </p>
<p v-show="data==='b'"> b(v-show) </p>
v-if 是直接决定页面元素是否存在
v-show是在样式级别控制元素是显示还是因此
lession 6、v-for 列表循环
数组遍历:
<li v-for="(item,index) in array" :key="item.id"></li>
对象遍历:
<li v-for="(value,key,index) in object" :key="key"></li>
object:{
name:'桃谷六仙'
hobby:'篮球'
}
v-if 和 v-for 联合使用
v-for 优先级比较高可以在v-for 的父元素写v-if判断
lession 7、事件
@click="logout(3,$event)"
logout(id,e){
alert(id)
console.log('e',e)
}
lession 8、父子组件通信方法prop $emit
通信方式总结:
父组件数据传递给子组件步骤:
1.父组件定义传递给儿子的数据
2.子组件用prop定义传递过来的数据的类型和变量的名称
3.父组件调用子组件,并进行属性值和变量名绑定
4.子组件调用父组件传递过来的数据
子组件给父组件传递数据的步骤:
1.子组件定义传递给父组件的数据对象和事件
2.父组件调用子组件,并且在调用标签绑定子组件传递过来的事件名称
3.在父组件的事件处理函数中接受子组件传递的数据对象
lession 9、兄弟组件通信方式
定义一个vue 实例
然后在兄弟组件中组件挂载的时候使用
eventBus.$on('addItem',this.handleAddTitle);
handleAddTitle(title){
console.log('title',title)
}
this.$emit('add',this.title)
eventBus.$emit('addItem',this.title)
lession 10、父子组件传值的5种方式
一、props+$emit()
二、回调函数方式(callback)
三、$parent+$children this.$children[0].data this.$parent.data
四、provide+inject 父组件 provide 子组件 inject
五、$attrs+$listeners 父、子、孙 三代组件 在子组件中用 v-bind="$attrs" 给孙组件 代传递父组件中的数据,在孙组件中之间用 {{$attrs.属性名}} 的方式使用 父组件中的数据
六、使用 ref 属性的方式 父组件 ref="childComp" this.$refs.childComp.属性名
lession 11、父子组件生命周期执行顺序问题
new vue() 生命周期
beforeCreate()
created()
beforeMount()
mounted()
beforeUpdate()
updated()
beforeDestory()
destroyed()
简化
created()
mounted()
updated()
destroyed()
存在父子组件的生命周期
parent:App created
child:List created
child:List mounted
parent:App mounted
结论:页面创建的时候 先父后子 挂载组件的顺序先子后父
parent:App before update
child:List before update
child:List updated
parent:App updated
结论:组件更新顺序 先父后子 更新完成的顺序 先子后父
lession 12、
1.nextTick 会在异步渲染完成后执行
2.异步渲染是批量进行渲染的
this.$nextTick(()=>{
const ulElem=this.$refs.ulRef;
const length=ulElem.childNodes.length;
console.log('length',length)
})
lession 13、slot 插槽
lession 14、vue3 和 vue2 的区别
Diff算法是如何实现的
配置项api options api
配置项型代码风格
很分散,逻辑不内聚,解决了耦合,没有解决
组合式api composition API
解决了高内聚问题
import {ref} from 'vue'
const useCmpute=(count)=>{
const plus=()=>{
count++;
}
const minus=()=>{
count--
}
return {
plus,minus
}
}
setup(){
const cout=ref(0);
{plus,minus}=useCompute(count);
return {
count,plus,minus
}
}
总结:
1. vue2和vue3双向数据绑定原理发生了改变
vue2 的双向数据绑定是利用ES5 的一个 API Object.definePropert()对数据进行劫持 结合 发布订阅模式的方式来实现的
vue3 中使用了 es6 的 ProxyAPI 对数据代理。
相比于vue2.x使用proxy的优势如下
defineProperty只能监听某个属性不能对全对象监听
可以省去for in、闭包等内容来提升效率直接绑定整个对象即可
可以监听数组,不用再去单独的对数组做特异性操作 vue3.x可以检测到数组内部数据的变化
2. 默认进行懒观察lazy observation
在 2.x 版本里不管数据多大都会在一开始就为其创建观察者。当数据很大时这可能会在页面载入时造成明显的性能压力。3.x 版本,只会对「被用于渲染初始可见部分的数据」创建观察者,而且 3.x 的观察者更高效。
3. 更精准的变更通知。
比例来说2.x 版本中,使用 Vue.set 来给对象新增一个属性时,这个对象的所有 watcher 都会重新运行3.x 版本中,只有依赖那个属性的 watcher 才会重新运行。
4. 3.0 新加入了 TypeScript 以及 PWA 的支持
5.vue2和vue3组件发送改变
reactivity API
Vue2使用选项类型APIOptions API
Vue3合成型APIComposition API