vue 生命周期有哪些
 beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
activated
deactivated
beforeDestroy
destroyed
errorCaptured
初始化请求数据在那个生命钩子里
// 最好放到 created 钩子里,在页面没有渲染之前
mounted
// mounted 钩子,是在dom 渲染完成后调用的钩子,当需要dom 加载完成后执行的操作,需要放到 该钩子函数中
activated deactivated
// 重复进出缓存组件的同时,需要做一下操作时很有用
activated 激活该组件时调用,初次进入也是调用,只要激活该组件
deactivated 组件失活时调用
vue 常用的指令
 v-if
v-show
v-model
v-on
v-bind
v-for
v-slot
v-if v-show 的区别
 两者都是有隐藏的功能,区别如下
v-if 是dom元素的插入和删除
v-show 是dom元素的显示和隐藏,操作的css样式 display:none/block
vue 父子组件传值的方法有几种
父子组件传值
1,父组件通过 prop 传值,子组件通过 $emit 向父组件 传值
2,通过v-model value input 传值(看下面示例)
3,通过 update sync 进行传值(看下面示例)
4,通过事件总线eveBus
5,直接操作子组件的数据 子组件通过$parent 向父组件传值
6, vuex
// 通过v-model 进行父子组件之间的传值
// v-model 就是一个语法糖 父组件通过默认属性 value传值,子组件通过默认事件 input 向父组件传值
-----------------------父组件-----------------
<template>
<div>
<model v-model="price"></model>
</div>
</template>
<script>
import model from './model.vue'
export default {
name:'parent',
components:{
model
}
}
---------子组件-----
<template>
<div>
<el-button @click="add">增加金额</el-button>
</div>
</template>
<script>
export default {
name:'child',
props: ['value'], // 接受值 value
methods: {
add() {
this.$emit('input', '我是子组件传的值') // 通过默认时间 input 向父组件传值
}
}
}
</script>
// sync update 配合使用
<template>
<div>
<atest :dialogVisible.sync="dialogVisible"></atest>
<button @click="open">显示 弹框 {{ dialogVisible }}</button>
</div>
</template>
<script>
import atest from './atest.vue'
export default {
name:'parent',
components:{
atest
},
data(){
return{
dialogVisible: false
}
},
methods: {
open () {
this.dialogVisible = !this.dialogVisible
}
}
}
------子组件----
<template>
<div>
<span v-if='dialogVisible'>
<el-button @click="close">取 消</el-button>
</span>
</div>
</template>
<script>
export default {
name:'child',
props: ['dialogVisible'],
methods: {
close() {
this.$emit('update:dialogVisible', false)
}
}
}
</script>
vue 组件跨代传值(爷孙组件及更深层组件)的方法
1. $attr $listeners(看示例)
2, provide/inject。(看示例)
3,通过事件总线eveBus
4,直接操作子组件的数据 子组件通过$parent 向父组件传值
5, vuex
$attr $listeners 组件跨代传值
// 父组件
<template>
<div>
<child :price="price" :from='from' :num='num' @upRocket="reciveRocket"></child>
</div>
</template>
<script>
import child from './child.vue'
export default {
name:'parent',
components:{
model
},
data() {
return {
// child 组件接受的参数
from:{
name:'wg',
age:18
},
price:200,
num:2
}
},
methods:{
// 要传递的函数
reciveRocket () {
console.log("reciveRocket success")
}
}
}
// 子组件
<template>
<div class="a">
<div>子组件</div>
<grandson :pageNum='pageNum' :pageSize='pageSize' v-bind="$attrs" v-on="$listeners"></grandson>
</div>
</template>
<script> import grandson from './grandson.vue' export default {
name: 'child',
props: ['from'], // 通过props 接受一个from
components: {
grandson
},
data () {
return {
pageNum:1,
pageSize:10
}
},
mounted() {
console.log(this.$attr,'attr')
console.log(this.$listeners,'listeners')
// price num 'attr' (父组件传进来 from price num, 子组件通过props 接受了 from, $attr 就剩下 price num)
// upRocket 'listeners' 父组件定义的函数
},
methods: { }
}
</script>
// 孙子组件
<template>
<div class="grandson">
<div>孙子组件</div>
<button></button>
</div>
</template>
<script> export default {
name: 'grandson',
components: {
grandson
},
data () {
return {
}
},
mounted() {
console.log(this.$attr,'attr')
console.log(this.$listeners,'listeners')
// pageNum pageSize price num 'attr' => attr 接受除props 接受的外的 所有属性
// upRocket 'listeners' 接受父组件绑定的函数,(父组件直接绑定的爷组件定义的函数)
},
methods: { }
}
</script>
如果跨代很多,$attr $listeners就会有点太繁琐,可以考虑 provide/inject
父组件通过 provide传值, 子组件 通过 inject 接受值,不过不是响应式的,具体参考官网(详细)点击这里
// 父级组件提供 'foo'
var Provider = {
provide: {
foo: 'bar'
},
// ...
} // 子组件注入 'foo'
var Child = {
inject: ['foo'],
created () {
console.log(this.foo) // => "bar"
}
// ...
}
兄弟组件传值
  // 1,eventBus
// 2,vuex
// 实际开发中,更倾向于子组件通过$emit 触发父组件函数,父组件再改变值传给 兄弟组件
watch computed 有什么区别
1. 当一个对象改变需要做一些逻辑处理或者开销比较大的时候,考虑使用watch
2. 当多个变量都会对某一个产品影响时,考虑使用 computed
$set 什么用途
// vue2.0 中,数据视图响应式是根据 Object.defineProperty 劫持属性的getter和setter 结合发布订阅者模式实现的,新加的属性实现响应,要用$set 对该属性进项劫持才能实现响应式
怎么缓存组件或者页面
// 用keep-alive,进行缓存,(不需要重新创建卸载 => 缓存)
路由有哪几种模式
// 浏览器端 hash 模式 history模式, 服务端 Abstract 模式,主要介绍浏览器端
// hash 变现为 url路径有#,原理是 通过监听 hashChange 进行路由的转换
// history 是Html5 新加的 History模式,原理是通过监听 pushState popState replaceState 进行路由的转换
路由传参有那些方式 三种方法
// 动态路由 路由表中配置占位符
{
path: '/list/:id',
name: 'list',
component:list
}
// 通过 push 跳转
this.$router.push({
path: `/particulars/${id}`,
})
// 通过 this.$route.params.id 取参
// path 方法传参
this.$router.push({
path: '/list',
query: {
name: 'wg'
}
})
// 通过 this.$route.query.name 取参
// name 方法传参
this.$router.push({
name: 'list',
params: {
age: '18'
}
})
// 通过 this.$route.params.age 取参
路由懒加载有几种 两种 require import
// require 方式
{
path: '/about',
name: 'About',
component: resolve => require(['../pages/About.vue'], resolve)
}
// import 方式
{
path: '/HelloWorld',
name: 'HelloWorld',
component: () => import("@/components/HelloWorld") // @ 通过webpack 配置,默认 指向src 文件
}
vuex 有那几个模块组成
// state   定义变量
// getters 派生状态 类似于计算属性
// mutations 改变 store 中的状态
// actions 主要操作异步操作,在组件中通过 this.$store.dispatch('xxx') 去触发actions方法
// modules 把store 分为细小的模块,应用于复杂的模块
mutations 和 actions 的区别
// mutations 主要用于同步操作 store.commit('xxx') 触发
// actions 主要用于异步操作 store.dispatch('xxx') 触发actions, actions 在通过触发 mutations 更改 state状态
怎么解决 vuex 刷新数据丢失的问题
// 把数据存到 sessionStorage中,当页面刷新时 store的初始值 从 sessionStorage中取
// 其关键点在于 把store的值什么时候存到 sessionStorage中,建议是 当页面刷新之前,可以再入口app.vue组件created钩子中 添加监听 beforeunload 进行处理赋值
最后一个 vue2.0 中 双向绑定的原理 (基础版)
// vue通过 Object.defineProperty 劫持data中各个属性的getter和setter,结合发布订阅者模式 进行数据和视图的响应

vue 中级基础考察面试题的更多相关文章

  1. Vue学习记录第一篇——Vue入门基础

    前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...

  2. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  3. 一个综合实例讲解vue的基础知识点。

    本文通过一个简单的实例来讲解一下vue的基本知识点.通过这个综合实例的讲解,vue的基础知识就会掌握的差不多了. 首先看一下项目的效果:

  4. Vue入门基础

    前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...

  5. 数据库基础SQL知识面试题二

    数据库基础SQL知识面试题二 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选课系统SQL语法练习 course数据库中有以下四张表: •students表(学生表): si ...

  6. 数据库基础SQL知识面试题一

    数据库基础SQL知识面试题一 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 如标题所示,本篇博客主要介绍基础知识的面试题.大家可以用来测试面试者的技术水平,由于个人水平所限,难免 ...

  7. Vue组件基础

    <!DOCTYPE html><html>    <head>        <meta charset="utf-8">      ...

  8. Java基础-考察JVM内部结构的常用工具介绍

    Java基础-考察JVM内部结构的常用工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们可以通过jvisualvm.exe考察jvm内部结构.而jvisualvm.exe ...

  9. react router @4 和 vue路由 详解(一)vue路由基础和使用

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...

随机推荐

  1. linux grep命令使用详解

    grep是我们最常用的命令之一,但是正真用的熟的不多,把基础命令记牢固,能帮我们节约很多时间 grep的option -A 1 表示找到所有匹配行,并显示所有匹配行后的一行 在错误日志查找时还是很有用 ...

  2. ECMAScript版本知识点汇总

    ECMAScript版本知识点汇总 ES5 btoa.atob 对参数进行base64格式编码.解码 /** * btoa() * base64编码 * @param {string} str * @ ...

  3. Python - pip-review 库

    使用 pip-review 库(推荐) 安装库 pip install pip-review 检查是否有需要更新的包 > pip-review scikit-learn==0.23.2 is a ...

  4. 百度云网速慢?普通VIP也限速?用户激励措施太套路?Pandownload被举报?这些统统没关系,我们自己搭建一个私人云盘服务器

    前言 前几天醒来后,照例耍手机看新闻.在疫情如此严重的档口,一则小小的新闻引起了我内心小小的波动:Pandownload作者被举报了....心里第一件事就是可惜了我盘上的那N多个T的小电影了,&quo ...

  5. autoCAD绘制简单三维立体图形

    第一步: 首先绘制一个简单的(封闭的)二维图形: 第二步: 变换观察视角,比如修改为 变换后的视角: 第三步: 选中闭合图形边框,使用组合键"ctrl + shift + E",然 ...

  6. LayoutControl控件使用

    因默认外边距过大需要将外边距缩小用以下代码实现layoutControlGroup1.Padding = DevExpress.XtraLayout.Utils.Padding.Empty;是否允许只 ...

  7. ByteArrayOutputStream小测试

    import java.io.*; import org.junit.Test; public class ByteArrayOutputStreamTest { @Test public void ...

  8. 尚硅谷Java高级笔记

    尚硅谷Java高级笔记 idea的使用: 一些小区别: 其他细节参考idea配置pdf 多线程: 基本概念: 多线程的优点: 何时需要多线程: 线程的创建和使用: 创建多线程的第一种方式: /** * ...

  9. Django学习day15BBS项目开发2.0

    每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...

  10. Node.js躬行记(10)——接口日志查询

    当运营向我们上报BUG时,我们第一时间是捕获相关的接口.从监控系统中,就可以查到用户使用时接口的请求和响应数据. 若接口的请求正常,那么就需要深入到接口代码中,查看相关的日志,通常会先浏览数据库查询语 ...