zoukankan      html  css  js  c++  java
  • vue知识点集锦

    1、vue的优点?

    • 轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb
    • 简单易学:国人开发,中文文档,不存在语言障碍,易于理解和学习
    • 双向数据绑定:保留了angular的特点,在数据操作方面更为简单
    • 组件化:保留了react的优点,实现了HTML的封装和重用,在构建单页面应用方面有着独特的优势
    • 视图、数据、结构分离:使数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作
    • 虚拟DOM:DOM的操作是非常耗费性能的,不再使用原生的DOM操作节点,极大解放DOM操作,但具体操作的还是DOM,不过是换了一种方式
    • 运行速度更快:相比较react而言,同样是操作虚拟DOM,就性能而言,vue存在很大的优势

    2、vue父组件向子组件传递数据?

      props

    3、vue子组件向父组件传递事件?

      $emit()

    4、v-show和v-if指令的共同点和不同点?

      共同点:都能控制元素的显示和隐藏

      不同点:实现本质方法不同,v-show本质是通过控制css中的display设置为none,控制隐藏,只会编译一次;v-if是动态的向DOM树内添加或删除DOM元素,若初始值为false,就不会编译了。而且v-if不停的销毁和创建比较消耗性能。总结:如果要频繁地切换某节点,使用v-show(切换开销小,初始开销较大)。如果不需要频繁切换某节点使用v-if(初始渲染开销较小,切换开销比较大)。

    5、如何让css只在当前组件中起作用?

      在组件中的style标签加上scoped

    6、<keep-alive></keep-alive>的作用是什么?

      keep-alive是vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。

    7、如何获取DOM?

      ref="domName"  用法:this.$refs.domName

    8、说几种vue的指令和它的用法?

      v-model----双向数据绑定

      v-for----循环

      v-if  v-show----显示与隐藏

      v-on----绑定事件  v-once----只绑定一次

    9、vue-loader是什么?使用它的用途有哪些?

      vue的一个加载器,将template/js/style转换成js模块

      用途:js可以写ES6、style样式可以写scss或less、template可以加jade等。

    10、为什么要使用key?为什么不使用下标作为key值?

      需要使用key来给每一个节点做一个唯一标识,diff算法就可以正确的识别此节点。作用主要是为了高效的更新虚拟DOM。

      因为数据可能会有增删改查的操作,所以index并不是实时准确的,最好用静态key值,比如id。

    11、axios及安装?

      axios是请求后台资源的模块。npm i axios --save安装好,js中使用import引入,然后 .get 或 .post 。成功返回在 .then 函数中,失败返回在 .catch 函数中。

    12、v-model的使用?

      v-model用于表单数据的双向绑定,其实它就是一个语法糖,这个背后就做了两个操作:v-bind绑定一个value属性;v-on指令给当前元素绑定input事件。

    13、vue-cli项目中src目录每个文件夹和文件的用法?

      assest----存放静态资源

      components----组件

      router----定义路由的相关配置

      app.vue----应用主组件

      main.js----入口文件

    14、分别简述computed和watch的使用场景?

      computed:当一个属性受到多个属性影响的时候就需要用到computed,比如购物车。computed还可以用来简化深层次的属性渲染,接收辅助函数中的mapState、mapGetters。

      watch:当一条数据影响到多条数据的时候就需要用到watch,比如搜索数据。

    15、v-on可以监听多个方法吗?

      可以。<input type="text" v-on="{input:onInput,focus:onFocus,blur:onBlur}">

    16、$nextTick()的作用?

      当你修改了data的值然后马上获取这个DOM元素的值,是不能获取到更新后的值,你需要使用$nextTick()这个回调,让修改后的data值渲染更新到DOM元素之后再获取,才能成功。

    17、vue组件中data为什么必须是一个函数?

      因为JavaScript的特性所导致,在component中,data必须是以函数的形式存在,不可以是对象。组件中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,它们只负责各自维护的数据,不会造成混乱。而单纯的写成对象形式,就是所有的组件实例共用了一个data,这样改一个全都改了。

    18、渐进式框架的理解?

      主张最少,可以根据不同的需求选择不同的等级。

      每个框架都不可避免会有自己的一些特点,从而对使用者有一定的要求,这些要求就是主张。渐进式框架就是没有多做职责之外的事。

      渐进式框架的大概意思就是你可以只用我的一部分,而不是用了我这一点就必须用我的所有部分。

    19、vue中双向数据绑定是如何实现的?

      vue双向数据绑定是通过数据劫持结合发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着发生变化,视图变化,数据也随之改变。核心:关于vue双向数据绑定,其核心是Object.defineProperty()方法。

    20、单页面应用和多页面应用的区别和优缺点?

      单页面应用(SPA),通俗一点说就是指只有一个主页面的应用,浏览器一开始要加载所有必须的html、css、js。所有的页面内容都包含在这个所谓的主页面中。但在写的时候,还是会分开写(页面片段),然后在交互的时候有路由程序动态载入,单页面的页面跳转,仅刷新局部资源。多应用于PC端。

      多页面应用(MPA),就是指一个应用中有多个页面,页面跳转时是整页跳转。

      单页面的优点:用户体验好,快,内容的改变不需要重新加载整个页面,基于这一点SPA对服务器压力较小;前后端分离;页面效果会比较炫酷(比如切换页面内容时的专场动画)。

      单页面的缺点:不利于SEO;导航不可用,如果一定要用导航需要自行实现前进、后退。(由于是单页面不能用浏览器的前进和后退功能,所以需要自己建立堆栈管理);初次加载耗时多;页面复杂度提高很多。

    21、v-if和v-for的优先级?

      当v-if和v-for一起使用时,v-for具有比v-if更高的优先级,这意味着v-if将分别重复运行于每个v-for循环中。所以不推荐v-if和v-for一起使用,可以用v-show和v-for一起使用。如果v-if和v-for一起使用,vue中会自动提示v-if应该放到外层去。

    22、assest和static的区别?

      相同点:assest和static两个都是存放静态资源文件。项目中所需要的资源文件图片,字体图标,样式文件等都可以放在这两个文件夹下。

      不同点:assest中存放的静态资源文件在项目打包时会进行压缩,也就是运行npm run build时会将assest中放置的静态资源文件进行打包上传,所谓打包简单点理解为压缩体积,代码格式化。而压缩后的静态资源文件最终也都会放置在static文件中跟着index.html一起上传至服务器。static中放置的静态资源文件就不会走打包压缩格式化等流程,而是直接进入打包好的目录,直接上传至服务器。因为避免了压缩而直接上传,在打包时会提高一定的效率,但是static中的资源文件由于没有进行压缩等操作,所以文件的体积也就相对于assest中打包后的文件体积较大点,在服务器中就会占据更大的空间。

      建议:将项目中template需要的css文件js文件等都可以放置到assest中,走打包这一流程,减少体积。而项目中引入的第三方的资源文件如iconfont.css等文件可以放置在static中,因为这些引入的第三方文件已经经过处理,我们不需要再处理,可以直接上传。

    23、vue常见的修饰符?

      .stop----等同于JavaScript中的event.stopPropagation(),阻止事件冒泡

      .prevent----等同于JavaScript中的event.preventDefault(),阻止浏览器默认行为

      .capture----与事件冒泡的方向相反,事件捕获由外到内

        正常的事件机制是捕获、目标、冒泡

        <div @click="test(1)">  <button @click="test(2)">test</button></div>
        顺序是2 1,capture的作用就是让这个顺序相反:
        <div @click.capture="test(1)">  <button @click="test(2)">test</button></div>
        现在顺序是1 2

      .self----只会触发自己范围内的事件,不包含子元素

      .once----只会触发一次

    24、vue的两个核心点?

      数据驱动:ViewModel,保证数据和视图的一致性

      组件系统:应用类UI可以看做全部是由组件树构成的

    25、vue和jQuery的区别?

      jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM,而数据和界面是在一起的。比如需要获取label标签的内容:$("label").val(),它还是依赖DOM元素的值。

      vue则是通过vue对象将数据和View完全分离开来,对数据进行操作不再需要引用相应的DOM对象,可以说和数据和View是完全分离的,他们通过vue对象这个vm实现相互的绑定,这就是MVVM。

    26、引进组件的步骤?

      在template中引入组件;在script的第一行用import引入路劲;在component中写上组件名称。

    27、delete和Vue.delete删除数组的区别?

      delete只是被删除的元素变成了empty/undefined,其他的元素的键值还是不变。

      Vue.delete直接删除了数组,改变了数组的键值。

    28、SPA首屏加载慢如何解决?

      安装动态懒加载所需插件;使用CDN资源。

    29、vue-router跳转和location.href有什么区别?

      使用location.href=/url来跳转,简单方便,但是刷新了页面;使用history.pushState(/url),无刷新页面,静态跳转;引进router,然后使用router.push(/url)来跳转,使用了diff算法,实现了按需加载,减少了DOM操作。其实使用router跳转和使用history.pushState()没什么差别,因为vue-router就是用了history.pushState(),尤其是在history模式下。

    30、vue slot

      简单来说,假如父组件需要在自组件标签中放一些DOM,那么这些DOM不会显示,不显示、显示在哪儿、如何显示,就是slot负责的。

    31、你们项目是打包了一个js文件,一个css文件,还是有多个文件?

      根据vue-cli规范,一个js文件,一个css文件。

    32、vue2中router-link在电脑上有用,在安卓上没有反应怎么解决?

      vue路由在Android机上有问题,是babel的问题,安卓babel-polypill插件解决。

    33、vue2中注册在router-link上事件无效解决办法?

      使用@click.native

      原因:router-link会阻止click事件,.native指直接监听一个原生事件。

    34、router-link在IE和Firefox中不起作用(路由不跳转)?

      方法一:只用a标签,不适用button标签

      方法二:使用button标签和this.router.navigate()方法

    35、axios的特点有哪些?

      从浏览器中创建XMLHttpRequest对象

      node.js创建http请求

      支持Promise API

      拦截请求和响应

      转换请求数据和响应数据

      取消请求

      自动换成json

      axios中的发送字段的参数是data跟params两个,二者的区别在于params是跟请求地址一起发送的,data作为一个请求体集体进行发送

      params一般适用于get请求,data一般适用于post put请求

         

    36、vue组件封装的过程?

      ①建立组件的模板,先把架子搭起来,写写样式,考虑好组件的基本逻辑

      ②准备好组件的数据输入。即分析好逻辑,定好props里的数据、类型

      ③准备好组件的数据输出。即根据组件逻辑,做好要暴露出来的方法

      ④封装完毕了,直接调用即可

    37、params和query的区别?

      用法:query要用path引入,params要用name引入,接收参数都是类似的,分别是this.$route.query和this.$route.params。

      url地址显示:query更加类似于ajax中的get传参,params类似于post传参,前者在浏览器地址栏中显示参数,后者不显示

      注意点:query刷新不会丢失query里面的数据,params刷新会丢失params里面的数据

    38、vue初始化页面闪动问题?

      使用vue开发时,在vue初始化之前,由于div不是归vue管的,所以我们写的代码还没有解析的情况下会容易出现花屏现象,看到类似于{{name}}的字样,虽然一般情况下这个时间很短暂,但是我们还是有必要解决这个问题的。首先:在css里加上[v-cloak]{display:none;},然后使用v-cloak指令。如果没有彻底解决问题,则在根元素上加上style="display:none;" :style="{display:block}"

    39、vue更新数组时触发视图更新的方法?

      push()

      pop()

      shift()

      unshift()

      splice()

      sort()

      reverse()

    40、常用的vue组件库?

      pc:elementUI、iview

      移动端:mintUI、vant、cubeUI、antd vue

    41、vue修改打包后静态资源路劲的修改?

      cli2版本:将config/index.js里的assetsPublicPath的值改为 ./

      buid:{
          assetsPublicPath: ./          
      }

      cli3版本:在根目录下新建vue.config.js,然后加上以下内容:(如果已经有此文件就直接修改)

      module.exports={
          publicPath: "", // 相对于html页面(目录相同)
      }

    42、什么是vue生命周期?有什么作用?

      每个vue实例在被创建的时候都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给我们在不同阶段添加自己的代码的机会。例如,如果要通过某些插件操作DOM节点,如想在页面渲染完成后弹出广告窗,那我们最早可以在mounted中进行。

    43、第一次加载页面会触发哪几个钩子?

      beforeCreate

      created

      BeforeMount

      mounted

    44、简述每个生命周期具体适合哪些场景?

      beforeCreate:在new一个vue实例后,只有一些默认的生命周期钩子函数和默认事件,其他的东西都还没创建。在beforeCreate生命周期执行的时候,data和methods中的数据都还没有初始化。不能在这个阶段使用data中的数据和methods中的方法。

      created:data和methods都已经初始化好了,如果要调用methods中的方法,或者操作data中的数据,最早可以在这个阶段中操作。

      beforeMount:执行到这个钩子的时候,在内存中已经编译好了模板了,但是还没有挂载到页面中,此时,页面还是旧的。

      mounted:执行到这个钩子的时候,就表示vue实例已经挂载完了。此时组件脱离了创建阶段,进入到了运行阶段。如果我们想要通过插件操作页面上的DOM节点,最早可以在这个阶段中进行。

      beforeUpdate:当执行这个钩子是,页面中的显示的数据还是旧的,data中的数据是更新后的,页面还没有和最新的数据保持同步。

      updated:页面显示的数据和data中的数据已经保持同步了,都是最新的。

      activated:进入keep-alive缓存的组件时调用,可以进行数据请求。

      deactivated:离开keep-alive缓存的组件时调用,可以做信息的填写。

      beforeDestroy:vue实例从运行阶段进入到了销毁阶段,这个时候所有的data和methods,指令,过滤器……都是处于可用状态,还没有真正被销毁。

      destroyed:这个时候所有的data和methods,指令,过滤器……都是处于不可用状态,组件已经被销毁了。

      errorCaptured:当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回false以阻止该错误继续向上传播。

    45、created和mounted的区别?

      created在模板渲染成html前调用,即通常初始化某些属性值,然后渲染成视图。

      mounted在模板渲染成html后调用,通常是初始化页面完成后,再对html的DOM节点进行一些需要的操作。

    46、vue获取数据在哪个生命周期函数?

      一般created、beforeMount、mounted都可以,如果要操作DOM,那肯定要在mounted中操作。

    47、请详细说下对vue生命周期的理解?

      创建前后:在beforeCreate阶段,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。在created阶段,vue实例的数据对象data有了,$el还没有。

      挂载前后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载前为虚拟DOM的节点,data.message还未替换。在mounted阶段,vue实例挂载完成,data.message成功渲染。

      更新前后:当data变化时,会触发beforeUpdate和updated方法。

      销毁前后:在执行destroy方法后,对data的改变不会再触发周期函数,说明此时vue实例已经解除了事件监听以及和DOM的绑定,但是DOM结构依然存在。

    48、MVVM框架是什么?

      vue是实现了双向数据绑定的MVVM框架,当视图改变时更新模型层,当模型层改变时更新视图层。在vue中,使用了双向绑定技术,就是view的变化能实时让model发生变化,而model的变化也能时候更新到view。

    49、vue-router是什么?它有哪些组件?

      vue用来写路由的一个插件。它有router-view和router-link组件

    50、active-class是哪个组件的属性?

      vue-router模块的router-link组件的属性,用来做高亮显示。

    51、怎么定义vue-router的动态路由?怎么获取传过来的值?

      在router目录下的index.js文件中,对path属性加上 /:id 。使用this.route.params取值。

    52、vue-router有哪几种导航钩子?(路由守卫、路由生命周期)

      三种

      第一种:全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截

      第二种:局部组件内的钩子:beforeRouterEnter()----访问不到this,如果非要拿,可以通过 next((vm)=>{}); 中的vm就是this、beforeRouterUpdate()----动态路由时路由变页面没变,需要用到路由更新、beforeRouterLeave()----确定要离开吗?确定要放弃本次支付吗?

      第三种:单独路由独享组件:beforeEnter(),直接在路由表中定义

    53、$route和$router和routes的区别?

      $route是当前路由跳转对象。里面可以获取当前路由的name,path,query,params,hash,fullpath等。

      $router是vue-router的实例,在script标签中想要导航到不同的url,使用this.router.push()方法,返回上一个历史用this.router.back()或this.router.go(-1)。

      routes是路由表,填写路由的配置项,是一个数组。

    54、vue-router的两种模式?

      hash模式:地址栏中 # 符号

      history模式:window.history对象打印出来可以看到里边提供的方法和记录长度。利用了HTML5 Histo Interface中新增的pushState()和replaceState()方法。(需要特定浏览器支持)

    55、vue-router实现路由懒加载(动态加载路由)

      三种方式

      第一种:vue异步组件技术----异步加载,vue-router配置路由,使用vue异步组件技术,可以实现按需加载,但是这种情况下一个组件生产一个js文件。

      第二种:路由懒加载(使用import)。

      第三种:webpack提供的require.ensure(),vue-router配置路由,使用webpack的require.ensure()技术,也可以实现按需加载。这种情况下,多个路由指定相同的chunkName,汇合并打包成一个js文件。

    56、vuex是什么?怎么使用?哪种功能场景使用它?

      vue框架中状态管理。在main.js中引入store,注入。

      新建store/index.js,引入vue和vuex,定义vuex中的状态和修改方法,export default导出。

      单页面应用中,组件之间的状态。音乐播放、登录状态、加入购物车。

    57、vuex有哪几种属性?

      state:基本数据,数据源存放地

      getters:从基本数据中派生出来的数据

      mutations:提交更改数据的方法,同步

      actions:像一个装饰器,包裹mutations,使之可以异步

      modules:模块化vuex

    58、ajax请求代码应该写在组件的methods中还是vuex的actions中?

      如果请求来的数据不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放在vuex的state里。

      如果被其他地方复用,这个很大几率上是需要将请求放入actions中,方便复用。

      

  • 相关阅读:
    Python之面向对象知识整理
    python2与python3的区别
    Gitlab 删除仓库文件夹
    Git撤销本地commit(未push)
    js库
    HTML | 打开网址后3秒跳转外链
    Vue CLI | 安装
    npm | npm淘宝镜像和查看镜像设置
    swiper | 过渡效果 effect: 'fade' 导致文字重叠
    CSS改变背景 | pattern.css
  • 原文地址:https://www.cnblogs.com/wuqilang/p/12455411.html
Copyright © 2011-2022 走看看