VUE面试题

本文深入探讨Vue.js的关键概念,包括生命周期、组件设计、指令使用、状态管理、路由原理等,旨在帮助开发者掌握Vue.js面试的核心知识点。重点讨论了Vue的创建、更新和销毁过程,v-if与v-show的区别,计算属性与方法的区别,以及如何获取和更新DOM。此外,还阐述了Vue的路由管理和Vuex的状态管理,以及Vue中自定义组件、事件处理和数据绑定的实现细节。
摘要由CSDN通过智能技术生成

生命周期

// 创建之前,在beforeCreate生命周期执行的时候,data和methods中的数据都还没有初始化,不能访问data数据
1. beforeCreate(){
console.log('beforeCreate',this.msg);
},
//创建之后,data和methods中的数据已经初始化,此时可以访问data数据
// 一般在这个函数中发起ajax请求
2. created(){
console.log('created',this.msg);
},
// 挂载之前,表示模板已经在内存中编译完成,但尚未把模板渲染到页面中。
// 此时还没有渲染用数据生成的新dom
3. beforeMount(){
console.log('beforeMount',this. el);
},
// 更新之前,当且仅当data被修改时才触发这个生命周期函数,但此时仅仅是数据被修改,页面还未更新。
5. beforeUpdate(){
console.log('beforeUpdate',this.msg);
console.log('beforeUpdate',this.el.innerHTML);
},
// 销毁之前,当执行beforeDestory钩子函数的时候,Vue实例就已经从运行阶段,进入到了销毁阶段。
// 当执行beforeDestory的时候,实例身上所有的data和所有的methods,以及过滤器、指令...都处于可用状态,此时还没有真正执行销毁过程。
7. beforeDestroy(){
console.log('beforeDestroy');
},
// 销毁之后,当执行到destoryed函数的时候,组件已经被全部销毁了,data与methods均不可用。
// 更改data数据,页面不会更新
//应用: 清除定时器
8. destroyed(){
console.log('destroyed');
}

 

当使用了<keep-alive>缓存组件时,会增加两个生命周期钩子

Vue全家桶

 

  vue的全家桶:   
        vue.js   
        vue-router.js  
        vue-cli (脚手架,快速搭建vue项目)
        axios  
        vuex.js

v-if与v-show的区别

v-if的显示和隐藏 是dom的创建与销毁
v-show的显示和隐藏是 基于display-none 和 display-block 无论是显示或是隐藏都会生成dom

vue指令

v-html 元素的innerHTML
v-text 元素的InnerText 只能用在双标签中
v-model 双向数据流绑定 主要作用于表单的 value 属性
v-bind 给元素绑定动态属性
v-on 处理自定义原生事件
v-if
v-else
v-else-if
v-show
v-once 只渲染一次 ,数据改变,视图更新,但v-once对应的元素不会再更新
v-slot 插槽

vue 脚手架中的data为什么必须是个函数

避免组件中的数据互相影响
组件中的data写成一个函数,数据以函数返回值形式定义,这样每复用一次组件,就会返回一份新的data,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。而单纯的写成对象形式,就使得所有组件实例共用了一份data,就会造成一个变了全都会变的结果。

vue中计算属性computed和方法methods和侦听器watch的区别

  1. 计算属性和方法都是函数,计算属性一定有返回值,它通过对数据进行处理,返回一个结果

     2. 在模板中调用时,计算属性不加(),而methods必须需要加()
     
     3. 计算属性和方法最主要的区别是计算属性有缓存功能。
    
         方法被调用时每次都要重复执行函数
    
         计算属性初次调用时执行函数,然后会缓存结果。当再次被调用时,如果依赖的响应式数据没有发生改变,则直接返回之前缓存的结果 。
    
         如果依赖发生了改变,则会再次执行函数并缓存结果 
    
     4. 不支持异步,当computed内有异步操作时无效,无法监听数据的变化
    

watch:

 

1. 侦听响应式数据的变化,数据变化时,执行相应的业务逻辑,可以有返回值,也可以没有

2. 侦听器默认在页面初始化时不执行,只有侦听数据发生变化才会执行。添加上immediate可初始化时就执行

3. 添加上immediate可初始化时就执行

Vue中如何获取原生dom

  1. 在元素标签上添加ref属性
  2. 通过this.$refs.属性名来获取dom
  3. 应用场景: 楼层导航中,要获取每个楼层距离页面顶端的偏移值
    注意:如果是异步请求的数据渲染的dom 需要使用 this.$nextTick()回调来获取更新后的dom

<ul ref="ulEl">
<li v-for="(item,index) in list" ref="liEl">{ {item}}</li>
</ul>
<p ref="pEl">这是一个段落</p>

Vue中的 this.$nextTick()

一般在请求数据后,需要获取dom的时候使用。

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

Vue中 this.$router 与this.$route的区别

 

    在一个vue组件中,都可以访问到这两个对象,它俩的区别 
    this.$route是路由记录对象,只读,存储了与路由相关的信息

    this.$router是路由对象,用来进行路由跳转

什么是SPA 单页面应用

单页Web应用(single page web application,SPA): SPA 是一种特殊的 Web 应用,是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的。它将所有的活动局限于一个 Web 页面中,仅在该 Web 页面初始化时加载相应的 HTML 、 JavaScript 、 CSS 。一旦页面加载完成, SPA 不会因为用户的操作而进行页面的重新加载或跳转,而是利用 JavaScript 动态的变换 HTML(采用的是 div 切换显示和隐藏),从而实现UI与用户的交互。在 SPA 应用中,应用加载之后就不会再有整页刷新。相反,展示逻辑预先加载,并有赖于内容Region(区域)中的视图切换来展示内容。

实现数组,对象更新检测的方法

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

// ====================================数组更新检测

 

// 三个参数: 数组,索引,新值
Vue.set(this.list,3,5)  //可以触发视图更新
this.$set(this.list,3,5)  //可以触发视图更新

// =================&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值