vue面试知识点汇总

1. v-for 与v-if的优先级

  1. 显然v-for优先于v-i被解析(源码说的清楚)
  2. 如果同时出现,每次渲染都会先执行循环再判断条件,无论如何循环都不可避免,浪费了性能
  3. 要避免出现这种情况,则在外层嵌套template, 在这一层进行v-if判断, 然后在内部进行v-for循环

2. 组件之间的传值

三种组件的传值方式

2.1.1 父组件向子组件传值

  • 1.父组件调用子组件的时候 绑定动态属性 <v-header :title="title"></v-header>
  • 2.在子组件有props接收父组件传递过来的数据
  • 3.可以传递属性,方法,实例,在子组件中直接使用

2.1.2 子组件主动获取父组件的属性和方法

子组件直接通过this.$parent.数据``this.$parent.方法

2. 2 子组件向父组件传值

2.2.1 父组件主动获取子组件的数据和方法

  • 调用子组件的时候定义一个ref <v-header ref="header"></v-header>
  • 在父组件里面通过 this.$refs.header.属性 this.$refs.header.方法

2.2.2 子组件自定义事件向父组件传值

子组件:

this. $emit("自定义事件名称" ,要传的数据) ;

父组件:

<Header @childInput= ' getVal '></Header>
methods:{
   
getVal(msg){
   
/ /msg就是,
子组件传递的数据
}
}

子组件

<template>
  <div>
   父组件传递过来的: {
   {
   this.$parent.msg}}
            <!-- 定义一个子组件传值的方法 -->
    <input type="button" value= @click="childClick">
  </div>
</template>

<script>
  export default {
   
    props:{
   
      msg:String
    },
    data () {
   
      return {
   
        childValue:"我是一个子组件的值"
      }
    },
    methods: {
   
      childClick () {
   
        this.$emit('childClick',this.childValue)
      }
    }
  }
</script>

父组件

<template>
  <div>
    我的名字是
    <!-- 子组件 -->
    <!-- <child :msg="name"></child> -->
     <!-- 引入子组件 定义一个on的方法监听子组件的状态-->
     <!-- 点击子组件按钮,将子组件的数据显示在父组件上 -->
     <!-- 自定义事件的名称要与子组件$emit的一致 -->
    <child @childClick="childByValue"></child>
    
    {
   {
   name}}

  </div>
</template>

<script>
import Child from './Child'
  export default {
   
    data() {
   
      return {
   
        name:"pz",
        msg:"父组件数据"
      }
    },
    components: {
   
      child:Child
    },
    methods: {
   
      childByValue(childValue) {
   
        // childValue就是子组件传过来的值
        this.name = childValue
      }
    }
  }
</script>

2.3 兄弟组件之间的传值

(非父子组件之间传值,需要定义个公共的公共实例文件bus.js,作为中间仓库来传值,不然路由组件之间达不到传值的效果。)
公共bus.js

import Vue from 'vue'
export default new Vue()

组件A:

<template>
  <div>
    A组件:
    <span>{
   {
   elementValue}}</span>
    <input type="button" value= @click="elementByValue">
  </div>
</template>
<script>
  // 引入公共的bug,来做为中间传达的工具
  import Bus from './bus.js'
  export default {
   
    data () {
   
      return {
   
        elementValue: 4
      }
    },
    methods: {
   
      elementByValue: function () {
   
        Bus.$emit('val', this.elementValue)
      }
    }
  }
</script>

组件B:

<template>
      <div>
        B组件:
        <input type="button" value= @click="getData">
        <span>{
   {
   name}}</span>
      </div>
    </template>
    <script>
      import Bus from './bus.js'
      export default {
   
        data () {
   
          return {
   
            name: 0
          }
        },
        mounted: function () {
   
          var vm = this
          // 用$on事件来接收参数
          Bus.$on('val', (data) => {
   
            console.log(data)
            vm.name = data
          })
        },
        methods: {
   
          getData: function () {
   
            this.name++
          }
        }
      }
    </script>

3. key的作用

作用:只要是为了更高效的更新虚拟dom
diff算法 虚拟dom
如果节点类型不同,直接干掉前面所有的节点,再创建并插入新的节点,不会再比较这个节点之后的节点
如果节点类型相同,会重新设置节点的属性,从而实现节点的更新,
使用key会给每一个节点作为一个标识,diff算法就可以正确的识别此节点,并可以找到新的位置插入节点

4. v-if v-show 区别

  • v-if是“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件***和子组件适当地被销毁和重建。
  • v-if也是惰性的:如果在初始渲染时条件为假,则什么也不做一直到条件第一次变为真时, 才会开始渲染条件块。
  • 相比之下,v-show 就简单得多一-不管初始条件 是什么元素总是会被渲染,并且只是简单地基于CSS进行切换。
  • 一般来说,v-if有更高的切换开销,而v-show有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用v-show较好;如果在运行时条件不太可能改变,则使用v-if 较好。

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

<style scope> </style>
拓展:如何改变引入第三方组件的样式???比如引入了swiper,要改变分页小圆点的样式演示用到sass的样式穿透:父元素 /deep/ 子元素

<style lang="sass" scope>
.swiper-pagination /deep/ .swiper-pagination-bullet-active {
   
  background:red;
}
</style>

6. 解决移动端时间处理300ms延迟的问题

  1. 下载
    npm install fastclick
  2. 引入
    import FastClick from ’ fastclick’
    FastClick。attach ( document. body);

7. vue-loader用途

vue-loader 是文件加载器,跟template/js/style装换成js模块
用途: js可以写es6 css可以是使用less sass

8. NextTick是做什么的

说明 :
$ nextTick是在下次DOM更新循环结束之后执行延迟回调,在修改函数之后使用$nextTick,则可以在回调中获取更新后的DOM
场景 : 在视图更新之后基于新的视图进行操作

9. 为什么脚手架中的data是返回一个函数

因为JS本身的特性带来的,如果data是一个对象,那么由于对象本身属于引用类型,当我们修改其中的一个属性时,会影响到所有Vue实例的数据。如果将data作为一个函数返回一个对象,那么每一个实例的data属性都是独立的,不会相互影响了。

10. keep-alive的理解

定义:他是一个内置的组件,他能在组件切换过程中将转态保存在内存中,防止重复渲染dom
说明 不会在dom树中渲染

11. watch和 computed差异

  • computed计算属性是有data中的已知值得到一个新的值,性能不好, 别人的变化影响自己(被动)
  • watch监听data中的数据,监听路由变化,我的变化影响别人(主动) 可以得到新的值和旧的值
全部评论

相关推荐

从大一开始就开始学习Java,一路走来真的不算容易,每次面试都被压力,不过这次终于达成了自己的一大心愿!时间线和面经:8.17-投递9.1-一面实习+项目拷打看门狗机制讲一下redis加锁解锁的本身操作是什么Lua脚本是干什么的udp和tcp讲一下流量控制讲一下令牌桶算法说一下大端和小端是什么线程和协程有什么区别怎么切换协程切换的时候具体做了什么对于程序来说,你刚才提到的保存和恢复现场,这个现场有哪些信息udp优势现在有一个客户端和服务端,要实现TCP的通信,我们的代码要怎么写服务器怎么感知有新的连接怎么处理多个客户端的请求连接TCP怎么处理粘包和分包现在有两个文件,然后每个文件都有一亿条URL,每个的长度都很长,要怎么快速查找这两个文件共有的URLHashmap底层说一下怎么尽量提升插入和查询的效率如果要查找快,查询快,还有解决非空的问题,怎么做LoadingCache了解吗手撕:堆排序9.4-二面部门的leader,超级压力面拷打实习+项目,被喷完全没东西类的加载到垃圾回收整个底层原理讲一遍类加载谁来执行类加载器是什么东西,和进程的关系Java虚拟机是什么东西,和进程的关系如果我们要执行hello&nbsp;world,那虚拟机干了什么呢谁把字节码翻译成机器码,操作时机是什么Java虚拟机是一个执行单元吗Java虚拟机和操作系统的关系到底什么,假如我是个完全不懂技术的人,举例说明让我明白一个操作系统有两个Java程序的话,有几个虚拟机有没有单独的JVM进程存在启动一个hello&nbsp;world编译的时候,有几个进程JVM什么时候启动比如执行一条Java命令的时候对应一个进程,然后这个JVM虚拟机到底是不是在这个进程里面,还是说要先启动一个JVM虚拟机的进程垃圾回收机制的时机能手动触发垃圾回收吗垃圾回收会抢占业务代码的CPU吗垃圾回收算法简单说说垃圾回收机制的stop&nbsp;the&nbsp;world存在于哪些时机垃圾回收中的计算Region的时候怎么和业务代码并行执行假如只有一个线程,怎么实现并行Java为什么要这么实现Java效率比C++慢很多,那为什么还要这样实现Java虚拟机到底是什么形式存在的说一下Java和C++的区别还有你对Java设计理念的理解无手撕面试结束的时候,我真的汗流浃背了,面试官还和我道歉,说他是故意压力面想看看我的反应的,还对我给予了高度评价:我当面试官这么多年,你是我见过最好的一个9.9-三面临时通知的加面,就问了三十分钟项目9.11-hr面问过往经历,未来计划,想从腾讯实习中得到什么?当场告知leader十分满意我,所以直接ochr面完一分钟官网流程变成录用评估中,30分钟后mt加微信告知offer正在审批9.15-offer这一次腾讯面试体验真的不错,每个面试官能感觉到专业能力很强,反馈很足,比起隔壁某节真是好太多以后就是鹅孝子了
三本咋了:当面试官这么多年你是我见过的最好的一个
你面试被问到过哪些不会的...
点赞 评论 收藏
分享
10-13 16:58
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务