H5

Vue组件

2018-12-13  本文已影响0人  w_wx_x

命名:
  短横线:<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
})
上一篇下一篇

猜你喜欢

热点阅读