5月29

171 阅读2分钟

又到了愉快的周五,早上呢继续背我们的面试题,组长也是进行简单的提问,今天感觉背的不是很好,因为提问的时候回答的不是特别好 上午呢老大说了Vue的递归组件,那么递归组件是干嘛的呢?比如有一组数据,有很多层级,如果不用递归的话,我们需要for循环很多次,如果用递归的话,直接可以将这组数据全部展示出来,也很方便

父组件

<template>
    <div>
        <tree-com
            :title="treeObj.name"
            :list="treeObj.children"
            :depth="0">
        </tree-com>
    </div>
</template>

<script>
import TreeCom from '../components/tree'
const treeObj = {
  name: '电子产品',
  children: [
    {
      name: '电视',
      children: [
        {
          name: 'philips',
          children: [
            { name: 'philips-A' },
            { name: 'philips-B' }
          ]
        },
        { name: 'Tcl' },
        { name: '海信' }
      ]
    },
    {
      name: '可穿戴设置',
      children: [
        {
          name: '手表',
          children: [
            { name: 'iWatch' },
            { name: '小米watch' }
          ]
        }
      ]
    }

  ]

}
export default {
  name: 'my',
  data () {
    return {
      treeObj
    }
  },
  components: { TreeCom }
}
</script>

<style lang="scss">

</style

子组件

<template>
    <div>
        <div class="title" :style="indent" @click="toggle">
           <span>{{ isShow ? '-':'+' }}</span>
           {{ title }}
        </div>
        <div v-if="isShow">
            <tree-com
                v-for="(item,index) in list"
                :key="index"
                :title="item.name"
                :list="item.children"
                :depth="depth+1"   //树形样式缩进
            >
        </tree-com>
        </div>
    </div>
</template>

<script>
export default {
  name: 'tree-com', // 通过组件自身的name来实现组件的递归调用
  data () {
    return {
      isShow: true, //显示或隐藏状态控制
    }
  },
  props: {
    title: {  //当前接收要显示的标题
      type: String,
      default: '名称'
    },
    list: {  //要递归的数组
      type: Array
    },
    depth: { //显示层级
      type: Number,
      default: 0
    }
  },
  computed: {
    //通过计算属性计算缩进样式
    indent () {
      return `transform:translate(${this.depth * 20}px)`
    }
  }

下午呢也是对vue路由过了一遍

路由两种形式

1.Hash 带# 【默认】

优点:兼容性好,不需要后端配置
缺点:路径不美观  

2.history :通过/来分隔路径

路由的传参 也是两种

1 params传参

{name:'/user',params:{ name:'1906A' }}"

2 query传参

 {path:'/user',query:{ name:'1906A' }}"

历史回退:

router.go(-1) //返回上一页
this.$route和this.$router的区别是什么
this.$route:获取路由参数
this.$router:跳转页面

嵌套路由:可以实现二级路由,三级路由

通过配置路由的children和要在哪个页面展示对应路由的router-view配合实现 比如

{
    path: '/my',
    component: My,
    children: [
      { //配置默认的二级路由
        path: '',
        component: My1
      },
      {
        path: 'my2',
        component: My2
      },
      {
        path: 'my3',
        component: My3
      }
    ]
  }

命名视图

可以在一个组件中展现多个组件视图

{
    path: '/my',
    component: My,
    //嵌套路由
    children: [
      {
        path: '',
        components: {
        //在My组件中添加2个视图页面
          a: My2,
          b: My3
        }
      }

命名路由

{
    path: '/my',
    name: 'my', //通过给路由命名
    component: My,
 }