1.v-model 的原理

v-model 是一个语法糖,它即可以支持原生表单元素,也可以支持自定义组件.v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件.

  • text 和 textarea 元素使用 value 属性和 input 事件
  • checkbox 和 radio 使用 checked 属性和 change 事件
  • select 字段将 value 作为 prop 并将 change 作为事件
  • 自定义组件的时候的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件

在自定义组件中,因为 value 可能作为其他的用处,所有官方推荐的解决方式就是自定 model

// 子组件创建
<template>
<div id="app">
<input
type="checkbox"
v-bind:checked="lovingVue"
v-on:change="$emit('change', $event.target.checked)"
/>
</div>
</template> <script>
export default {
name: "app",
props: ["lovingVue"],
model: {
prop: "lovingVue",
event: "change"
}
};
</script> // 父组件使用
<Children v-model="lovingVue"/>

2.vue 事件中传入$event,使用 e.target 和 e.currentTarget 有什么区别?

在 vue 中绑定事件

<div class="outer" @click="handleClickEvent($event)">
<div class="inner"></div>
</div> ...... handleClickEvent(e) {
console.log("arguments :", arguments[0]); //MouseEvent
console.log("event :", e); //MouseEvent
console.log("e.target :", e.target); // <div class="inner"></div>
console.log("e.currentTarget :", e.currentTarget); //<div class="outer"><div class="inner"></div></div>
}

这样点击内部的 inner 也能触发事件,但是 e.target 和 e.currentTarget 指向不同的对象,currentTarge 是事件绑定的元素而 target 是鼠标触发的元素

3.组件进来请求接口时你是放在哪个生命周期?为什么?

  • created => 因为在这个生命周期我们常用到的都已经初始化好了
  • 涉及到需要页面加载完成之后的话就用 mounted,可以操作 dom
  • beforeCreate => beforeCreate 到 created 是同步,可以更早执行

4.使用计算属性的时,函数名和 data 数据源中的数据可以同名吗?

不能同名 因为不管是计算属性还是 data 还是 props 都会被挂载在 vm 实例上,因此 这三个都不能同名

5.vue 中 data 的属性可以和 methods 中的方法同名吗?为什么?

  1. eslint 不允许你这么做
  2. 源码地址Method "${key}" has already been defined as a data property.,

6.使用 vue 后怎么针对搜索引擎做 SEO 优化?

  • ssr,即单页面后台渲染
  • vue-meta-info 与 prerender-spa-plugin 预渲染
  • nuxt
  • phantomjs

7.怎么给 vue 定义全局的方法?

  • Vue.prototype[key] = tools[key]
  • Vue.mixin(mixin)全局混入 mixin
  • Vue.use(plugin)
  • // 创建全局方法 this.$root.$on('test', callback) , this.$root.$off 关闭,this.$root.$emit 触发

8.跟 keep-alive 有关的生命周期是哪些?描述下这些生命周期

  • activated: 页面第一次进入的时候,钩子触发的顺序是 created->mounted->activated
  • deactivated: 页面退出的时候会触发 deactivated,当再次前进或者后退的时候只触发 activated

9.你知道 vue 中 key 的原理吗?说说你对它的理解

作用的话,便于 diff 算法的更新,key 的唯一性,能让算法更快的找到需要更新的 dom,需要注意的是,key 要唯一,不然会出现很隐蔽性的更新问题。

你知道 vue 中 key 的原理吗

10.vue 中怎么重置 data?

vm.$data 可以获取当前状态下的 data

vm.$options.data 可以获取到组件初始化状态下的 data

Object.assign(this.$data, this.$options.data())

题目和答案来源于 每日面试题

[Vue] vue的一些面试题的更多相关文章

  1. Javascript - Vue - vue对象

    vue提供了一整套前端解决方案,可以提升企业开发效率 vue的处理过程 app.js 项目入口,所有请求最先进入此模块进行处理 route.js 由app.js调用,处理路由的分发 controlle ...

  2. Vue - vue.js 常用指令

    Vue - vue.js 常用指令 目录: 一. vuejs模板语法之常用指令 1. 常用指令: v-html 2. 常用指令: v-text 3. 常用指令: v-for 4. 常用指令: v-if ...

  3. 前端开发 Vue Vue.js和Nodejs的关系

    首先vue.js 是库,不是框架,不是框架,不是框架. Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. Vue.js 的核心是一个允许你 ...

  4. [Vue] : Vue概述

    什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架. Vue.js 是前端的主流框架之一,和Angular.js.React.js 一起,并成为前端三大主流框 ...

  5. Property 'validate' does not exist on type 'Element | Element[] | Vue | Vue[]'. Property 'valid...

    使用vue-cli 3.0+Element-ui时候,调用form表单校验时候出现的问题是: Property 'validate' does not exist on type 'Element | ...

  6. Vue Vue.use() / Vue.component / router-view

    Vue.use Vue.use 的作用是安装插件 Vue.use 接收一个参数 如果这个参数是函数的话,Vue.use 直接调用这个函数注册组件 如果这个参数是对象的话,Vue.use 将调用 ins ...

  7. vue & vue router & dynamic router

    vue & vue router & dynamic router https://router.vuejs.org/guide/essentials/dynamic-matching ...

  8. vue & vue router & match bug

    vue & vue router & match bug match bugs solution name must be router https://stackoverflow.c ...

  9. 使用angular/react/vue实现相同的面试题组件

    面试题要求如下所示 1.angular: <!DOCTYPE html><html lang="en"><head> <meta char ...

随机推荐

  1. oracle(转)

    Oracle数据库基本操作 1.概述 Oracle数据库客户端一般需要安装在服务器上,可以在服务器端操作,一般我们可以用sql developer工具远程连接到数据库,先行建立数据库,然后对表进行增删 ...

  2. JS框架_(Laydate.js)简单实现日期日历

    百度云盘 传送门 密码:71hf JavaScript日期与时间组件_____laydate.js 日期日历效果: <!DOCTYPE html> <html> <hea ...

  3. Unity3D_(地形)创建基本场景

    第一人称漫游场景 地形漫游系统: (自己绘制的GIF文件超过20MB放不上博客园.截取了几张图片)按键盘上的“上下左右”可以控制第一人称的漫游视角 资源包和项目源文件:传送门 自己做的项目可执行文件: ...

  4. 大哥带的XSS练习LEVE2

    0X01输出在html标签中的XSS 这里相当于我们把XSS代码插入到了 html中的<td>标签中 其他好看的 但是不是同源访问 <script> var body= doc ...

  5. Hibernate理解?

    (1)Hibernate是对象关系映射框架,对JDBC进行非常轻量级的对象封装,是全自动的ORM框架,可以自动生成SQL语句.自动执行. (2)语言特点 <1>将对数据库的操作转换为对Ja ...

  6. LeetCode 74. 搜索二维矩阵(Search a 2D Matrix)

    题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: ma ...

  7. vuex 的介绍

    vue-cli 中 css 的作用域 scoped vue 数据的为响应数据,一改全改,一变全变的特性,我们的很多处理也会围绕着他 vuex 是处理数据的,是 vue 的数据仓库 vuex 的作用:采 ...

  8. c++使用openssl操作秘钥相关

    PEM_write_bio_RSAPublicKey(pub, keypair);//生成-----BEGIN RSA PUBLIC KEY-----类型的公钥 PEM_write_bio_RSA_P ...

  9. layui文件上传中如何先判断后再弹出文件选择框

    前言:layui中的上传,如何在点击上传按钮前阻止file的默认打开文件选择框呢?我想点击后先判断下,如果判断结果不符合,就直接弹出提示框,而不是文件选择框,判断符合才进行文件选择.但是在layui的 ...

  10. 常用IDE 教程(IntelliJ IDEA、Android Studio、Chrome)

    1.IntelliJ IDEA 使用教程 http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/ 2.Chrome 开发工具指南 htt ...