router vue 动态改变url_2020年 vue常见面试问题总结(干货)!

c116556027f785f51fb7c738f849eee4.png

1.什么是mvvm模式,谈谈你的理解?

  • MVVM - Model View ViewModel,数据,视图,视图模型
  • view 可以通过 事件绑定 的方式影响 model,
  • model 可以通过 数据绑定 的形式影响到view,
  • viewModel是把 model 和 view 连起来的桥梁,
  • 这样就实现了数据的双向绑定。

2.vue构建初始化工程的步骤(vuecli3)?

终端执行:

  • 1.npm install -g @vue/cli
  • 2.vue create hello-world
  • 3.cd hello-world
  • 4.npm run serve

3.列举几个vuecli 项目目录中文件夹以及它们的作用?

|-- dist # 打包后文件夹

|-- public # 静态文件夹

| |-- favicon.ico

| |-- index.html #入口页面

|-- src # 源码目录

| |--assets # 模块资源

| |--components # vue组件

| |--views # 视图文件

| |--App.vue # 公共主组件

| |--main.js # 入口文件,加载公共组件

| |--router.js # 路由配置

|-- vue.config.js # 配置文件

|-- .gitignore

|-- babel.config.js # babel语法编译

|-- package.json # 项目基本信息 ,npm包管理

4.谈谈vuecli如何解决本地调用api的跨域问题?

以vuecli3为例,配置vue.config.js中的proxy

module.exports = {devServer: {proxy: {'/api': {target:'http://xxxxxx',//api地址changeOrigin:true, //是否跨域secure: false,  //https改为truepathRewrite: {'^/api' : ''},}},host: 'localhost', // can be overwritten by process.env.HOSTport: 8080, },publicPath: './',  }

5.vue.js 的优点?

  • 渐进式框架,只关注视图层,mvvm架构模式实现数据的双向绑定;
  • 数据驱动,组件系统;
  • 体积小,速度快 。

6.vue.js双向绑定的原理?

利用Object.defineProperty()这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。

7.vue页面不重新渲染

0ab6d76e48b21fa49cd4507481f709c2.png

或者调用this.$forceUpdate()方法

8.请谈谈你对vue.js 生命周期的理解?

1.什么是vue.js的生命周期:Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模版、挂载 Dom -> 渲染、更新 -> 渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。

2.各个生命周期的作用

e90add90196b56e838dad8b703a95b4a.png

9.在那个生命周期下调用异步请求?

mounted和created下都可以,本人建议是在created下调用。

10.为什么vue中组件里面的data是一个函数而不是一个对象呢?

因为组件可能被用来创建多个实例,如果data仍然是一个纯粹的对象,则所有的实例将共享引用一个数据对象,通过提供data函数,每次创建一个新的实例之后,我们能够调用data函数从而返回一个全新的副本数据对象,这样每一个实例都有自己私有的数据空间不会互相影响

11.vue-router路由模式有几种?请谈谈你对它们的理解?

常用的路由模式有hash和history;

最直观的区别是hash模式url上会携带有一个#,而history不携带;

  • hash:

即地址栏URL中的#符号,它的特点在于hash值虽然出现在URL中,但不会被包括在HTTP请求中,对服务端完全没影响,因此改变hash值不会重新加载页面。

  • history:

利用了HTML5 History interface 中新增的pushState() 和 replaceState()方法。

这两个方法应用于浏览器历史记录栈,提供了修改历史记录的功能,执行修改时虽然改变了URL但是不会立即的向服务端发起请求。

因此可以说

hash和history模式都属于浏览器自身的特性,vue-router只是利用了这两个特性来实现前端路由

但是在history模式下会出现刷新404的问题,对于这个问题,我们只需要在服务器配置nginx如果URL匹配不到任何静态资源,就跳转到默认的index.html

location /{root   /data/nginx/html;index  index.html index.htm;if (!-e $request_filename) {rewrite ^/(.*) /index.html last;break;}}

12.vue-router传参方式以及如何获取参数?

  • 通过router.js文件中配置path的地方动态传递参数,'/detail/:id'
  • 传递的时候 this.$router.push({name:"",params:{id:""}})
  • 获取的时候 this.$route.params.id
  • 或者用query的方式 this.$route.query.id

13.vue-router有几种常用的路由守卫,谈谈他们各自的作用?

守卫的种类:

  • 全局前置守卫
const router = new VueRouter({ ... })router.beforeEach((to, from, next) => {// ...
})
  • 全局后置守卫
router.afterEach((to, from) => {// ...
})
  • 全局解析守卫
在 2.5.0+ 你可以用 router.beforeResolve 注册一个全局守卫;
这和 router.beforeEach 类似;
区别是在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用。
  • 路由独享守卫
const router = new VueRouter({routes: [{path: '/',component: Index,beforeEnter: (to, from, next) => {// ...}}]
})

14.如何使用vuex?

第一步安装

npm install vuex -S

第二步创建store.js

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
//创建Vuex实例对象
const store = new Vuex.Store({strict:debug,//在不是生产环境下都开启严格模式state:{},getters:{},mutations:{},actions:{}
})
export default store;

第三步注入vuex

import Vue from 'vue';
import App from './App.vue';
import store from './store';
const vm = new Vue({store:store,render: h => h(App)
}).$mount('#app')

15.vuex中有几个核心属性,分别是什么?

一共有5个核心属性,分别是:

  • state 唯一数据源,Vue 实例中的 data 遵循相同的规则
  • getters 可以认为是 store 的计算属性,就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。Getter 会暴露为 store.getters 对象,你可以以属性的形式访问这些值。
const store = new Vuex.Store({state: {todos: [{ id: 1, text: '...', done: true },{ id: 2, text: '...', done: false }]},getters: {doneTodos: state => {return state.todos.filter(todo => todo.done)}}
})store.getters.doneTodos // -> [{ id: 1, text: '...', done: true }]
  • mutation 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation,非常类似于事件,通过store.commit 方法触发
const store = new Vuex.Store({state: {count: 1},mutations: {increment (state) {// 变更状态state.count++}}
})store.commit('increment')
  • action Action 类似于 mutation,不同在于Action 提交的是 mutation,而不是直接变更状态,Action 可以包含任意异步操作
const store = new Vuex.Store({state: {count: 0},mutations: {increment (state) {state.count++}},actions: {increment (context) {context.commit('increment')}}
})
  • module 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。
const moduleA = {state: () => ({ ... }),mutations: { ... },actions: { ... },getters: { ... }
}const moduleB = {state: () => ({ ... }),mutations: { ... },actions: { ... }
}const store = new Vuex.Store({modules: {a: moduleA,b: moduleB}
})store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态

16.axios请求代码应该写在组件的methods中还是vuex的actions中

  • 如果请求来的数据是不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state里。
  • 如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用。

17.从vuex中获取的数据能直接更改吗?

  • 从vuex中取的数据,不能直接更改,需要浅拷贝对象之后更改,否则报错;

18.vuex中的数据在页面刷新后数据消失

  • 用sessionstorage 或者 localstorage 存储数据
存储: sessionStorage.setItem( '名', JSON.stringify(值) )
使用: sessionStorage.getItem('名') ---得到的值为字符串类型,用JSON.parse()去引号;

19.mutation和action有什么区别

  • action 提交的是 mutation,而不是直接变更状态。mutation可以直接变更状态
  • action 可以包含任意异步操作。mutation只能是同步操作
  • 提交方式不同
action 是用this.store.dispatch('ACTION_NAME',data)来提交。
mutation是用this.$store.commit('SET_NUMBER',10)来提交
  • 接收参数不同,mutation第一个参数是state,而action第一个参数是context,其包含了
{state,      // 等同于 `store.state`,若在模块中则为局部状态rootState,  // 等同于 `store.state`,只存在于模块中commit,     // 等同于 `store.commit`dispatch,   // 等同于 `store.dispatch`getters,    // 等同于 `store.getters`rootGetters // 等同于 `store.getters`,只存在于模块中
}

20.在v-model上怎么用Vuex中state的值?

需要通过computed计算属性来转换。

<input v-model="message">
// ...
computed: {message: {get () {return this.$store.state.message},set (value) {this.$store.commit('updateMessage', value)}}
}

21.请谈谈watch,computed以及methods的区别?

  • computed一般是一个依赖值衍生新的值,值结果会被缓存,除非依赖值发生变化才会重新计算( eg:购物车结算 )
  • watch一般监听一个对象键值是需要观察的变量或者表达式,键值对应是回调函数,主要是负责监听某些特定数据的变化,从而进行某些具体的业务逻辑
  • methods方法表示一个具体的操作,负责书写主要业务逻辑

22.说出几个vue.js常用指令?

  • v-model
  • v-for
  • v-text
  • v-html
  • v-on
  • v-bind
  • v-if
  • v-show
  • v-cloak
  • 畅所欲言...

23.v-show与v-if有什么区别?

  • v-if

是真正的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建;也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

  • v-show

就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 的 display 属性进行切换。
所以,v-if 适用于在运行时很少改变条件,不需要频繁切换条件的场景;v-show 则适用于需要非常频繁切换条件的场景。

24.class和style如何动态绑定?

1.Class 可以通过对象语法和数组语法进行动态绑定:

  • 对象语法:
<div v-bind:class="{ active: isActive, 'text-danger': hasError }"></div>data: {isActive: true,hasError: false
}
  • 数组语法:
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div> data: {  activeClass: 'active',  errorClass: 'text-danger' 
}

2.Class 可以通过对象语法和数组语法进行动态绑定:

  • 对象语法:
 <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>  data: { activeColor: 'red', fontSize: 30 }  
  • 数组语法:
 <div v-bind:style="[styleColor, styleSize]"></div> data: { styleColor: {color: 'red'},   styleSize:{fontSize:'23px'}
}

25.vue事件修饰符以及各个的作用?

  • .stop:阻止事件冒泡
  • .native:绑定原生事件
  • .once:事件只执行一次
  • .self 将事件绑定在自身身上,相当于阻止事件冒泡
  • .prevent:阻止默认事件
  • .passive: 2.3.0 新增,滚动事件的默认行为 (即滚动行为) 将会立即触发,不能和.prevent 一起使用

26.vue中获取dom的方式?

在标签中加上ref='dom',然后在代码中this.$refs.dom这样就拿到了页面元素

例如:<div class='box' ref='myBox'>你好</div>

让你好的颜色显示为红色:this.$refs.myBox.style.color = 'red

27.vue中$nextTick的使用?

  • vue中DOM的异步更新,提前获取更新之后的DOM this.$nextTick(()=>{})

28.vue初始化页面会出现闪动问题,该如何解决?

  • 在App.vue 根dom上面加一个v-cloak,css内加一个[v-cloak] { display: none;}

29.vue如何优化页面加载?

  • UI组件库尽量使用cdn的方式引入;
  • 配置路由懒加载的方式;
  • 增加loading图,提升用户体验

30.v-on可以监听多个方法吗?

  • 可以监听多个不同类型的方法,不可以监听同一种事件

31.列举vue组件通信的几种方式?

304738cbcd106849135278d60709aaed.png

32.父组件和子组件生命周期执行的顺序?

1.加载渲染过程:

父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate

-> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted 2.子组件更新过程:

父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated 3.父组件更新过程:

父 beforeUpdate -> 父 updated 4.销毁过程:

父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed

33.父组件可以监听到子组件的生命周期吗?

@hook:监听的生命周期 = "自定义事件名"

//  Parent.vue<Child @hook:mounted="doSomething" ></Child> doSomething() {   console.log('父组件监听到 mounted 钩子函数 ...');},      
//  Child.vue mounted(){  console.log('子组件触发 mounted 钩子函数 ...');},          
// 以上输出顺序为:
// 子组件触发 mounted 钩子函数 ... 
// 父组件监听到 mounted 钩子函数 ...  

34.vue引入组件的步骤?

  • 1.script 里面用import 引入组件
  • 2.在export default里面用components:{}注册组件名字
  • 3.在template中挂载组件


35.谈谈对keep-alive的了解?

  • 一般是用来配合路由缓存组件

36.ES6常用知识点?

  • https://www.cnblogs.com/ainyi/p/8537027.html

37.谈谈你对深浅拷贝的理解?

  • 本质区别在于复制的是引用还是复制的实例
  • 所谓浅拷贝是仅仅复制了引用,换句话说复制的变量和被复制的指向是同一个引用,彼此之间操作会互相影响
  • 深拷贝是将原对象层级属性一一复制,相当于直接复制的实例,形成两个独立的对象,彼此操作不会互相影响,
  • 实现深拷贝的方式一般有递归遍历
  • es6 实现数组深拷贝的方法 :var arr2 = [...arr1] or var arr2 = Array.from(arr1)
  • 或者是通过json对象来实现var newObj=JSON.parse(JSON.stringfy(obj))

38.说出你了解的前端安全问题以及解决方案?

  • xss跨站脚本攻击
  • CSRF跨站请求伪造
  • sql注入
  • https://blog.csdn.net/m0_48446542/article/details/108271860

.......未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html怎么弄艺术字体,如何为图片加上艺术字的图文方法步骤

给图片加字有好多方法&#xff0c;比如用photoshop等专业工具&#xff0c;在线图片加字&#xff0c;但是前者效果好&#xff0c;操作较复杂&#xff0c;后者效果不大理想。其实有更简单相对效果也不错的方法&#xff0c;利用你手边的工具就可以了&#xff01;下面介绍利用Windo…

androidstudio调用系统相机为什么resultcode一直返回0_函数递归调用?看这文就够了...

作者 | Cooper Song责编 | Elle出品 | 程序人生(ID&#xff1a;coder_life)我猜&#xff0c;大多数程序员第一次接触函数的递归调用都是在算斐波那契数列某项值的时候&#xff0c;这是函数递归调用最常见的应用之一。规定第一项和第二项为1&#xff0c;后面的项&#xff0c;每一…

http请求 url 竖线_http.createServer创建http服务

语法&#xff1a;http.createServer([options][, requestListener])第二个参数requestListener&#xff0c;是一个自动添加到request事件的方法。返回一个新的 http.Server实例。之前代码是使用server.on(request,callback)来监听请求事件&#xff0c;由于http.createServer第二…

物理不突出能学计算机吗,物理成绩不突出,高中选科怎么办?3个理由让你解除后顾之忧!...

目前确定将要于2021年采用新高考“312”模式的有河北、辽宁、江苏、福建、湖南、湖北、广东和重庆8个省市。但是很多高一新生和家长们&#xff0c;面对选科问题时&#xff0c;却是犯了愁。“想选物理呢&#xff0c;物理成绩不突出&#xff0c;没有优势&#xff0c;听说选考物理…

@bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...

点击上方“匠心零度”&#xff0c;选择“设为星标”做积极的人&#xff0c;而不是积极废人来源&#xff1a;my.oschina.net/floor/blog/4325651前言1.Component解析流程找入口找核心方法概要分析2.查文档找思路3. 探寻Component派生性流程1. 确定metadataReader2.查看match方法…

centos7已有数据硬盘挂载_干货!如何给虚拟机增加虚拟硬盘,Linux再分区挂载

很多朋友一开始给虚拟机的硬盘都很小&#xff0c;用着用着虚拟硬盘就不够了&#xff0c;今天小编就给大伙说说如何给虚拟机添加虚拟硬盘在到Linux系统下分区格式化再到挂载。点击创建新的虚拟盘我分配一个8g的硬盘吧&#xff01;现在启动centos 7查看一下你刚刚添加的8G的硬盘&…

diy机器人图片 手绘纸箱_废物利用,她用几个纸箱让家里变成动物园,孩子回家乐坏了!收藏...

纸箱是我们日常生活中最常见的一种废品&#xff0c;现在随着网购的崛起&#xff0c;家里的纸箱越来越多&#xff0c;这时候你是直接丢弃&#xff0c;还是会想想是否可以再利用的价值&#xff1f;这些看似没用的纸箱&#xff0c;在创意妈的眼中可是个宝贝呢~它可以变废为宝成为孩…

计算机研究生考426分单科多少,考研初试426分,依然没被录取,他犯的错误,值得大家参考!...

原标题&#xff1a;考研初试426分&#xff0c;依然没被录取&#xff0c;他犯的错误&#xff0c;值得大家参考&#xff01;最近几天&#xff0c;考研初试成绩陆续发布。考试分数比较高的考生&#xff0c;有机会参加复试&#xff0c;就要尽早准备复试复习了。复试成绩也很重要&am…

70进货卖100利润是多少_一只周黑鸭随便就卖100多,那成本有多少?说出来你可能不信...

一只周黑鸭动不动就卖100多&#xff0c;那成本有多少&#xff1f;说出来你可能不信。如果你吃过周黑鸭&#xff0c;不知道每次想起的时候&#xff0c;尤其是午夜时分会不会有流口水的感觉&#xff0c;那种麻辣的口感&#xff0c;再搭配上冰凉爽口的啤酒&#xff0c;发自心底的那…

powerquery加载pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了

Hello.大家好&#xff0c;最近office365进行了一次小的更新&#xff0c;这次更新在excel中添加了获取pdf文件中的表格的功能&#xff0c;操作起来十分的简单&#xff0c;下面就跟大家分享下它是如何操作的首先我们新建一个excel文件&#xff0c;然后点击数据功能组&#xff0c;…

防火墙设置导致服务器站点打开,服务器、网站、环境配置全正常网站打不开原来是系统防火墙造成的...

大家都知道网站是架在服务器上的&#xff0c;通过域名解析指向网站并在服务器上绑定域名&#xff0c;上传网站程序到指定的目录&#xff0c;并只要有适合网站运行的环境&#xff0c;网站目录权限正常网站就肯定可以正常运行了&#xff0c;但今天我们技术遇到了一个问题以上所说…

web前端开发技术期末考试_智慧树来我校开展WEB前端开发微专业导学

11月17日&#xff0c;在6号教学楼6102阶梯教室&#xff0c;智慧树工作人员带来了WEB前端开发微专业导学。根据前期长青联盟微专业的报名情况及学生学习情况&#xff0c;为进一步提高学生学习微专业的质量&#xff0c;学院联系了微专业教学平台的专家对教学平台的使用进行技术指…

计算机辅助设计还需要手绘吗,西安电脑如此发达为什么还要学习手绘

在处理器以八核成为主流、硬盘以T而论的今天&#xff0c;计算机辅助设计软件是设计师的得力工具。用铅笔、尺子要时间才能画好的一个室内空间平面布置图&#xff0c;如果用CAD可能一个小时都不用就完成了&#xff0c;而且很方便修改&#xff0c;可见在效率方面&#xff0c;电脑…

一键生成通讯录的软件_橙瓜码字自动写作软件,外貌描写对话描写一键生成

很多写手对于以古代为背景的小说&#xff0c;偶尔都会对某些地方感到棘手&#xff0c;有时候是历史的背景&#xff0c;有时候是当时的官制、称呼&#xff0c;或是一些特有的服饰&#xff0c;外貌的描写&#xff0c;而面对难题&#xff0c;很多时候我们也是选择上网查询&#xf…

gin 静态文件服务器拒绝,nginx实现简单的图片服务器(windows)+静态文件服务器-Go语言中文社区...

需求&#xff1a;能够使用 http://localhost/目录/图片名 访问本地(服务器)已经存在的图片首先需要在本地将nginx跑起来&#xff0c;这里使用默认端口80&#xff1b;在浏览器使用http://localhost看到下面的界面证明nginx启动正常。下面需要修改nginx.conf来实现直接使用http:/…

wegame每次登陆都要滑动验证_Vue项目中实现用户登录及token验证

在前后端完全分离的情况下&#xff0c;Vue项目中实现token验证大致思路如下&#xff1a;1、第一次登录的时候&#xff0c;前端调后端的登陆接口&#xff0c;发送用户名和密码2、后端收到请求&#xff0c;验证用户名和密码&#xff0c;验证成功&#xff0c;就给前端返回一个toke…

云服务器 性能监控软件,云监控 - 云应用监控 - ManageEngine Applications Manager

云监控什么是云监控?尽管许多组织仍然依赖于在自托管的数据中心中存储数据的本地方法&#xff0c;但在业务组织中采用云服务的情况已经逐渐增多。自然&#xff0c;这导致了一些云监控工具的出现。无论您使用的是公共、私有还是混合环境&#xff0c;对应用程序性能具有端到端可…

mysql导入dat文件_MySql导入和抽取大数量级文件数据

一、情况介绍需要处理的文件是一个3.41G的csv格式文件&#xff0c;现在需要把它导入数据库&#xff0c;进行后续处理和分析。二、导入数据该文件数据量庞大&#xff0c;无法用excel或者editplus之类普通软件打开&#xff0c;于是借用了pandas的方法查看了表的结构&#xff1a;方…

服务器操作系统与安装步骤,服务器操作系统与安装步骤

服务器操作系统与安装步骤 内容精选换一换如果在创建弹性云服务器时未设置密码&#xff0c;或密码丢失、过期&#xff0c;可以参见本节操作重置密码。密码丢失或过期前&#xff0c;已安装密码重置插件。公共镜像创建的弹性云服务器默认已安装一键重置密码插件。私有镜像创建的云…

文件服务器mfs,分布式文件系统MFS(moosefs)实现存储共享

这种架构除了性能问题而外&#xff0c;还存在单点故障&#xff0c;一旦这个NFS服务器发生故障&#xff0c;所有靠共享提供数据的应用就不再可用&#xff0c;尽管用rsync方式同步数据到另外一个服务器上做nfs服务的备份&#xff0c;但这对提高整个系统的性能毫无帮助。基于这样一…