目录
MVVM模式分为Model,View,ViewModel 三个部分
组件中 data 为什么是一个函数? 为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?
v-show和v-if的区别?
v-if对应的是元素/标签的添加或者删除,满足条件添加元素,不满足条件删除元素
v-show对应的是元素的CSS样式中的display属性隐藏和显示
满足条件对应的是元素的显示 display:block
不满足条件对应的是元素的隐藏 display:none
v-show用于频繁的切换css样式key的作用
vue会尽可能高效率渲染元素,我们不希望被渲染的时候。只需添加一个具有唯一值的 key
模板语法
插值: 1.基本渲染 {{}} v-html v-bind
列表渲染;v-for
条件渲染:v-if v-show
属性渲染
事件渲染v-on:click @click为什么data是一个函数而不是一个对象
因为组件是一个可复用的实例,所有组件引用同一个对象会造成数据污染,函数使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件。
watch和computed的区别
watch:
1. 监听值的变化,执行异步操作【axios请求】
2. 无缓存性,页面重新渲染时值不变化也会执行computed:
1.具有缓存性,页面重新渲染值不变化,计算属性会立即返回之前的计算结果
2.不支持异步,异步操作无法监听数据的变化组件通信组件交互组件传值
父组件向子组件传递数据——使用props
子组件向父组件传递数据——使用this.$emit暴露一个function给父组件
兄弟组件之间;子组件A传给父组件 父组件传给子组件B单向数据流(数据更改的方向)
父组件可以改给子组件的数据
父改子可以,子改父不行为什么Vue中的v-if和v-for不建议一起用?
v-for优先级比v-if高
v-if 和 v-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)什么是虚拟DOM?
它是真实DOM的内存表示,一种编程概念,一种模式,会和真实DOM同步.
什么是Vue的响应式/Vue响应式原理什么是响应式,也即是说,数据发生改变的时候,视图会重新渲染,匹配更新为最新的值。
Object.defineProperty 为对象中的每一个属性,设置 get 和 set 方法,每个声明的属性,都会有一个专属的依赖收集器 subs,当页面使用到 某个属性时,触发 ObjectdefineProperty - get函数,页面的 watcher 就会被 放到 属性的依赖收集器 subs 中,在 数据变化时,通知更新;
当数据改变的时候,会触发Object.defineProperty - set函数,数据会遍历自己的依赖收集器 subs,逐个通知 watcher,视图开始更新;Vuex
Vuex是状态机,理解为状态管理模式;用来维护组件之间共享数据,内部有五个属性
state是用来维护共享数据的,getters用来操作state中的数据之后并返回,mutations是用来做同步操作的,这是唯一修改state数据的方式,actions是用来做异步操作的,将后台获取到的响应通过突变commit提交给mutations。modules用来维护多个状态机对象的。Vue生命周期
beforeCreate--刚初始化了一个空的vue实例对象,只有默认的事件和生命周期,其他东西未创建。
created--在created阶段,data和methods中的方法已经初始化好了
beforeMount--模板在内存编译好了,但还没挂载到页面上去,页面还是旧的
mounted--整个vue实例初始化完毕,挂载到页面。
beforeUpdate--页面中的数据还是旧的,此时data中的数据是最新的,页面尚未和最新数据同步
Updated--页面和data数据同步,都是最新的
beforeDestory--实例销毁前 仍然可以访问实例的data和methods
destoryed--组件已经完全销毁,监听器,子组件,事件监听等移除页面之间如何跳转
使用编程式导航
this.$router.push(),可以通过name params和path query跳转 跳转区别:params携带一次性参数router和route区别
router为VueRouter的实例,相当于一个全局的路由器对象,里面含有很多属性和子对象
route相当于当前正在跳转的路由对象。可以从里面获取name,path,params,query等谈谈你对Vue的理解?
关键点: 渐进式 JavaScript 框架、核心库加插件、动态创建用户界面(异步获取后台数据,数据展示在界面)
特点: MVVM 模式;代码简洁体积小,运行效率高,适合移动PC端开发;本身只关注 UI (和 react 相似),可以轻松引入 Vue 插件或其他的第三方库进行开发。MVVM模式分为Model,View,ViewModel 三个部分
(1).Model:数据层,包含数据实体和对数据实体的操作
(2).View:界面层,对应于Activity,XML,View,负责数据显示以及用户交互。
(3).ViewModel:关联层,将Model和View进行绑定,Model或者View更改时,实时刷新对方。什么是MVVM?
全称: Model-View-ViewModel , Model 表示数据模型层。view 表示视图层, ViewModel 是 View 和 Model 层的桥梁,数据绑定到 viewModel 层并自动渲染到页面中,视图变化通知 viewModel 层更新数据。
组件中 data 为什么是一个函数?
为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?因为组件是用来复用的,且 JS 里对象是引用关系,如果组件中 data 是一个对象,那么这样作用域没有隔离,子组件中的 data 属性值会相互影响,如果组件中 data 选项是一个函数,那么每个实例可以维护一份被返回对象的独立的拷贝, 组件实例之间的 data 属性值不会互相影响;而 new Vue 的实例,是不会被复用的,因此不存在引用对象的问题。
谈谈你对 keep-alive 的了解?
keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避免重新渲染 ,其有以下特性:
一般结合路由和动态组件一起使用,用于缓存组件;
提供 include 和 exclude 属性,两者都支持字符串或正则表达式, include 表示只有名称匹配的组件会被缓存,exclude 表示任何名称匹配的组件都不会被缓存 ,其中 exclude 的优先级比 include 高;
对应两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 activated,当组件被移除时,触发钩子函数 deactivated。computed和watch的区别是什么?
computed和watch都基于watcher来实现的。
computed的属性是具备缓存的,依赖的值不发生变化,对其取值时计算属性方法不会重复执行
watch是监控值的变化,当值发生改变的时候,会调用回调函数
谈谈对组件的理解?
组件化开发能大幅提高应用开发效率、测试性、复用性
常用的组件化技术:属性、自定义事件、插槽
降低更新范围,值重新渲染变化的组件
高内聚、低耦合、单向数据流Vue的普通Slot以及作用域Slot的区别?
普通插槽
普通插槽是渲染后做替换的工作。父组件渲染完毕后,替换子组件的内容。作用域插槽
作用域插槽可以拿到子组件里面的属性。在子组件中传入属性然后渲染。
Vue基础面试题
最新推荐文章于 2024-05-25 21:04:50 发布