Vue组件

命名:
  短横线:<my-component-name>
  驼峰式:<MyComponentName>

Vue.component('my-component-name', { /* ... */ })
Vue.component('MyComponentName', { /* ... */ })

注册:

1. 全局注册

方式:
  方式一:App.vue或main.js里面直接引入
  方式二:新建一个文件夹统一放置全局组件,写一个js处理,再在main.js引入

方式一

// App.vue
<script>
  import IconFont from './components/IconFont'
  export default {
    name: 'App',
    components:{
      IconFont
    }
  }
</script>


// main.js
import IconFont from './components/IconFont'
Vue.component(IconFont)


// 新建一个globalComponen.js文件
// 将所用到的全局组件在里面引入,在main.js文件内引入此js
// globalComponent.js 
import IconFont from './IconFont.vue'
export default (Vue)=>{
  Vue.component("IconFont",IconFont)
}
// 在main.js文件里面引入globalComponent.js文件
import globalComponent from './components/globalComponent.js';
Vue.use(globalComponent);

方式二
  如图新建文件夹


image.png
// globalComponent.js 文件

import Vue from 'vue'
// 组件名字处理会用到lodash
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
/**
 * 基础组件相对于当前文件的相对位置
 * 是否查询子目录
 * 匹配基础组件名字的正则,这里均是base开头
 */
const requireComponent = require.context(
  './base',
  false,
  /base[A-Z]\w+\.(vue|js)$/
)
/**
 * componentConfig      获取组件配置
 * componentName        获取组件的PascalCase命名
 * camelCase            剥去文件名开头'./'和结尾的扩展名
 * Vue.component        全局注册组件
 */
requireComponent.keys().forEach(fileName => {
  const componentConfig = requireComponent(fileName)
  const componentName = upperFirst(
    camelCase(
      fileName.replace(/^\.\/_/, '').replace(/\.\w+$/, '')
    )
  )
  Vue.component(componentName, componentConfig.default || componentConfig)
})



// main.js引入globalComponent.js文件
import '@/components/globalComponent.js'   
2. 局部注册

在要引入的组件内引入

<script>
import IconFont from './components/IconFont'
   export default {
    name: 'App',
    components:{
      IconFont
    }
}
</script>

动态组件&异步组件

is:切换不同的组件
keep-alive:失活的组件将会被缓存(切换组件时,保持这些组件的状态,避免重复渲染时使用)

<component :is="currentTabComponent"></component>

<keep-alive>
  <component :is="currentTabComponent"></component>
</keep-alive>

异步组件:
    在需要的时候从服务器加载一个模块
    为了简化,vue允许以工厂函数的方式定义组件,用于异步解析组件定义
    只有组件被渲染的时候才触发该工厂函数,且会把结果缓存起来供未来重新渲染

// 全局注册
Vue.component(
  'async-webpack-example',
  ()=>import('./my-async-component')
)

// 局部注册
new Vue({
  components:{
    'my-component':()=>import('./my-async-component')
  }
})

// 处理加载状态
const AsyncComponent = () => ({
  component:import('./MyComponent.vue'),      //  需要加载的组件
  loading:LoadingComponent,                   //  异步组件加载时使用的组件
  error:ErrorComponent,                       //  加载失败时使用的组件
  delay:200,                                  //  加载时组件的延时时间
  timeout:3000
})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • PS:转载请注明出处作者: TigerChain地址: https://www.jianshu.com/p/8de...
    TigerChain阅读 4,839评论 1赞 53
  • 此文基于官方文档,里面部分例子有改动,加上了一些自己的理解 什么是组件? 组件(Component)是 Vue.j...
    陆志均阅读 4,020评论 5赞 14
  • 基于Vue的组件库 https://github.com/ElemeFE/element" element 饿了么...
    技术小白熊阅读 1,817评论 0赞 16
  • 基于Vue的组件库 https://github.com/ElemeFE/element" element 饿了...
    _执着执着再执着阅读 33,020评论 4赞 230
  • 什么是组件—————————————————————————————————————组件 (Component) ...
    胡自鲜阅读 795评论 0赞 0

友情链接更多精彩内容