zoukankan      html  css  js  c++  java
  • Vue 组件开发

    1. 异步组件

      场景: 项目过大就会导致加载缓慢, 所以异步组件实现按需加载就是必须要做的事了

      (1) 异步加载组件

     1 // 工厂函数执行 resolve 回调
     2 Vue.component('async-webpack-example', function (resolve) {
     3   // 这个特殊的 `require` 语法将会告诉 webpack
     4   // 自动将你的构建代码切割成多个包, 这些包
     5   // 会通过 Ajax 请求加载
     6   require(['./my-async-component'], resolve)
     7 })
     8 
     9 // 工厂函数返回 Promise
    10 Vue.component(
    11   'async-webpack-example',
    12   // 这个 `import` 函数会返回一个 `Promise` 对象。
    13   () => import('./my-async-component')
    14 )
    15 
    16 // 工厂函数返回一个配置化组件对象
    17 const AsyncComponent = () => ({
    18   // 需要加载的组件 (应该是一个 `Promise` 对象)
    19   component: import('./MyComponent.vue'),
    20   // 异步组件加载时使用的组件
    21   loading: LoadingComponent,
    22   // 加载失败时使用的组件
    23   error: ErrorComponent,
    24   // 展示加载时组件的延时时间。默认值是 200 (毫秒)
    25   delay: 200,
    26   // 如果提供了超时时间且组件加载也超时了,
    27   // 则使用加载失败时使用的组件。默认值是:`Infinity`
    28   timeout: 3000
    29 })

      异步组件的渲染本质其实就是执行2次或者2次以上的渲染,先把当前组件渲染为注释节点, 当组件加载成功后,通过forceRender 执行重新渲染。或者是渲染为注释节点,然后渲染为loading节点,在渲染为请求完成的组件。

       

    (2) 路由的按需加载

     1 webpack< 2.4 2 {
     3   path:'/',
     4   name:'home',
     5   components:resolve=>require(['@/components/home'],resolve)
     6 }
     7 
     8 webpack> 2.4 9 {
    10   path:'/',
    11   name:'home',
    12   components:()=>import('@/components/home')
    13 }
    14 
    15 import()方法由es6提出,import()方法是动态加载,返回一个Promise对象,then方法的参数是加载到的模块。
    类似于Node.js的require方法,主要import()方法是异步加载的。

     2.动态组件

      场景:做tab切换时就会涉及到组件动态加载

    1 <transition>
    2 <keep-alive>
    3   <component v-bind:is="currentTabComponent"></component>
    4 </keep-alive>
    5 </transition>

    3. 递归组件

       场景:如果开发一个tree组件,里面层级是根据后台数据决定的,这个时候就需要用到递归组件

     1 // 递归组件: 组件在它的模板内可以递归的调用自己,只要给组件设置name组件就可以了。
     2 // 设置那么House在组件模板内就可以递归使用了,不过需要注意的是,
     3 // 必须给一个条件来限制数量,否则会抛出错误: max stack size exceeded
     4 // 组件递归用来开发一些具体有未知层级关系的独立组件。比如:
     5 // 联级选择器和树形控件 
     6 
     7 <template>
     8   <div v-for="(item,index) in treeArr">
     9       子组件,当前层级值: {{index}} <br/>
    10       <!-- 递归调用自身, 后台判断是否不存在改值 -->
    11       <tree :item="item.arr" v-if="item.flag"></tree>
    12   </div>
    13 </template>
    14 <script>
    15 export default {
    16   // 必须定义name,组件内部才能递归调用
    17   name: 'tree',
    18   data(){
    19     return {}
    20   },
    21   // 接收外部传入的值
    22   props: {
    23      item: {
    24       type:Array,
    25       default: ()=>[]
    26     }
    27   }
    28 }
    29 </script>

     4. 函数式组件

  • 相关阅读:
    20209/29
    2020/9/30
    2020/10/1
    ATM测试总结报告
    20201020 千锤百炼软工人
    20201024 千锤百炼软工人
    20201025 千锤百炼软工人
    20201023 千锤百炼软工人
    20201018 千锤百炼软工人
    20201022 千锤百炼软工人
  • 原文地址:https://www.cnblogs.com/shenjilin/p/11673077.html
Copyright © 2011-2022 走看看