美文网首页
vue封装全局组件

vue封装全局组件

作者: 养樂多_566c | 来源:发表于2020-06-27 03:31 被阅读0次

首先写是需要封装的组件

NavBarTitle.vue

<template>
    <div class="NavBarTitle">
        <van-nav-bar
                left-arrow
                @click-left="onClickLeft"
        >
        <div slot="title">{{NavBarTitle}}</div>
        </van-nav-bar>
    </div>
</template>
<style>
    .NavBarTitle .van-nav-bar__text,.van-nav-bar .van-icon{
        color:#333333;
    }
    .NavBarTitle /deep/ .van-nav-bar__title{
        font-size: 17px;
        color: #000;
        /*padding-top: 0.16rem;*/
    }
</style>
<script>
    import { NavBar } from 'vant';
    export default {
        props: ['NavBarTitle'],
        data() {
            return  {
//                NavBarTitle:"期中考试"
//                NavBarTitle:this.NavBarTitle
            }
        },
        components: {
            [NavBar.name]:NavBar,
        },
        methods:{
            onClickLeft(){
                this.$router.go(-1);
            }
        }
    }
</script>

然后在同目录创建一个NavBarTitle.js文件
NavBarTitle.js

// 组件全局注册
import Vue from 'vue'

import NavBarTitlefrom '@/components/NavBarTitle/NavBarTitle.vue'//封装共用

// 组件库
const Components = [
NavBarTitle
]

// 注册全局组件
Components.map((com) => {
Vue.component(com.name, com)
})

export default Vue

最后在main.js中引用就行了,注意还是要在挂载实例前去引用
main.js

 import './components/NavBarTitle'

通常在组件使用前,需要引入后再注册,但如果高频组件多了后,每次都这样做,不仅新增很多代码,效率还低!我们应该如何优化呢?
可以借助一下webpack的require.context() 方法来创建自己的(模块)上下文,从而实现自动动态require组件
先在components文件夹(这里面都是些高频组件)添加一个叫global.js的文件,在这个文件里使用require.context 动态将需要的高频组件统统打包进来,然后在main.js文件中引入global.js的文件.这样就无需再手动一个个引入了。

globalComponents.js

import Vue from 'vue'

function changeStr(str) {//首字符转大写
    return str.charAt(0).toUpperCase() + str.slice(1)
}
/*
 * require.context(path,sta,name)
 * path:其组件目录的相对路径
 * sta: 是否查询其子目录
 * name:匹配基础组件文件名的正则表达式    /\w.(vue|js)/
 */
const requireComponent = require.context('./', false, /\.vue$/)
// 查找同级目录下以vue结尾的组件 对应每个匹true配的文件名
const install = () => {
    requireComponent.keys().forEach(fileName => {
        let config = requireComponent(fileName); //获取组件配置
        // console.log(config) // ./child1.vue 然后用正则拿到child1
        let componentName = changeStr( //获取组件名
            fileName.replace(/^\.\//, '').replace(/\.\w+$/, '')
        )
        // 如果这个组件选项是通过 `export default` 导出的,
        // 那么就会优先使用 `.default`,
        // 否则回退到使用模块的根。
        Vue.component(componentName, config.default || config)
    })
}
export default {
    install // 对外暴露install方法
}

main.js

import globalComponents from './plugins/globalComponents.js
Vue.use(globalComponents)

page.vue 页面引用文件

 <search-comp @onSearch="handleOnSearch" :conditionsData="conditionsData"></search-comp>

// 注意:组件中的name要跟文件名称一致

另外一直方式,直接加到this.$xxx

https://www.jb51.net/article/144952.htm

相关文章

  • vue组件

    vue组件 标签(空格分隔): vue 组件可以扩展HTML元素,封装可重用代码。 注册 组件的注册有两种: 全局...

  • 2018-05-13 vue 组件方面

    组件可以扩展 HTML 元素,封装可重用的代码。 全局组件: Vue.c...

  • Element-UI库的BackTop组件的二次封装

    封装Backtop全局组件 components组件文件中新建backtop文件夹然后新建BackTop.vue ...

  • vue封装全局组件

    首先写是需要封装的组件 NavBarTitle.vue 然后在同目录创建一个NavBarTitle.js文件Nav...

  • Vue 全局组件封装

    在Vue项目的开发中,我们需要对一些常用的组件进行封装复用,这时我们需要用到Vue提供的全局组件API来封装我们的...

  • 14Vue- 组件引入

    为了扩展HTML元素,封装可重用的代码组件的注册方式:a. 全局组件:Vue.component来创建:Vue.c...

  • vue全局组件

    全局组件 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重...

  • Vue中的组件

    什么是组件? 组件可以扩展 HTML 元素,封装可重用的代码。 使用组件 注册 全局注册 局部注册通过Vue实例的...

  • 2018-09-18

    组件是可复用的 Vue 实例一、组件:可以拓展HTML元素,封装可重用的代码组件分为全局组件和局部组件通过prop...

  • vue 组件

    1:组件:是Vue组强大的功能之一 组件化开发 组件可以扩展 HTML元素,封装可重用的代码 全局组件:Vu...

网友评论

      本文标题:vue封装全局组件

      本文链接:https://www.haomeiwen.com/subject/dltmfktx.html