自定义vue组件,一般是局部引用的方式载入,使用的时候,在应用的组件中使用 import moduleName from ‘module' 导入,在components中注册

{{info.title}}

import comment from "../sub/comment.vue";

export default {

data() {

return {

info: {},

id: this.$route.query.id

};

},

methods: {},

components: {

comment

},

那么如果某个组件经常复用,岂不是每次在新组建中引用都要导入一次吗?是的 。这种情况下可以将组件封装成全局组件,一次导入之后,全局都可以使用。 虽然这种做法不太常见,但是这里还是将其整理出来。

1.首先创建一个文件夹loading

用来保存需要全局引用的组件,并且存放一些配置文件。

2.创建一个loading.vue的组件。

该组件中除了组件的基础结构,并无其他内容。它的作用是用来加载准备自定义的组件,最后将loading组件加载到全局的Vue中,这样就一次性完成了所有自定义组件的加载,非常方便。

export default {

data() {

return {};

},

methods: {}

};

3.创建自定义组件

这里以一个简单封装的mint-ui轮播图为例。

export default {

name: "navbar",

props: ["list"], //接收父组件数据

data() {

return {

};

},

methods: {

detail(e) {

var id = e.target.dataset.id;

var url = `/GoodsInfo/${id}`;

this.$router.push(url);

}

},

created() {}

};

.mint-swipe {

height: 150px;

}

.mint-swipe img {

width: 100%;

}

4.创建index.js,用来导出所有自定义组件。

import turns from './turns.vue'

const loading = {

install: function (Vue) {

Vue.component('turns', turns)

}

}

export default loading;

其实到这里组件封装就结束了,下面再演示下如何使用。

5.在main.js中,导入并使用loading组件。

import loading from './lib/loading';

Vue.use(loading);

这样就将组件全局引用成功了!

6.在需要使用的地方,直接使用组件名即可。

通过这种方式,就能实现组件的全局引用。

这种做的好处是对于复用性非常高的组件,省去了每次导入的麻烦;

缺点是无法直观的看到组件引入和注册,对于不清楚的人来说看不懂组件名的意义。

其实官方文档中已经提到了一种解决方案:

基础组件的自动化全局注册

可能你的许多组件只是包裹了一个输入框或按钮之类的元素,是相对通用的。我们有时候会把它们称为基础组件,它们会在各个组件中被频繁的用到。

所以会导致很多组件里都会有一个包含基础组件的长列表:

import BaseButton from ‘./BaseButton.vue' import BaseIcon from

‘./BaseIcon.vue' import BaseInput from ‘./BaseInput.vue'

export default { components: {

BaseButton,

BaseIcon,

BaseInput } }

而只是用于模板中的一小部分:

幸好如果你使用了 webpack (或在内部使用了 webpack 的 Vue CLI 3+),那么就可以使用 require.context 只全局注册这些非常通用的基础组件。这里有一份可以让你在应用入口文件 (比如 src/main.js) 中全局导入基础组件的示例代码:

import Vue from ‘vue' import upperFirst from ‘lodash/upperFirst'

import camelCase from ‘lodash/camelCase'

const requireComponent = require.context( // 其组件目录的相对路径

‘./components', // 是否查询其子目录 false, // 匹配基础组件文件名的正则表达式

/Base[A-Z]\w+.(vue|js)$/ )

requireComponent.keys().forEach(fileName => { // 获取组件配置 const

componentConfig = requireComponent(fileName)

// 获取组件的 PascalCase 命名 const componentName = upperFirst(

camelCase(

// 剥去文件名开头的 ./ 和结尾的扩展名

fileName.replace(/^./(.*).\w+$/, ‘$1')

) )

// 全局注册组件 Vue.component(

componentName,

// 如果这个组件选项是通过 export default 导出的,

// 那么就会优先使用 .default,

// 否则回退到使用模块的根。

componentConfig.default || componentConfig ) })

补充知识:vue组件注册 Vue.extend Vue.component Vue.use的使用 以及组件嵌套

我就废话不多说了,大家还是直接看代码吧~

/**

* vue.extend用法

* 使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。

* 注意:此实例可以挂载到根实例之外

*/

const Profile = Vue.extend({

template: '

{{firstName}} {{lastName}} aka {{alias}}

',

data: function () {

return {

firstName: 'Walter',

lastName: 'White',

alias: 'Heisenberg'

}

}

})

// 创建 Profile 实例,并挂载到一个元素上。

new Profile().$mount('#opp')

let navbar = {

template: `

data:()=>{

return {

}

},

mounted() {

console.log(this.$parent)

}

};

const MyPlugin = {

install:(vue, arguments)=>{

console.log(arguments);

vue.component('navbar', navbar);

}

}

Vue.use(MyPlugin, {a:1, b:2}); // 组件注册成功

// logo组件

Vue.component("logo", {

template: `

`,

inject: ['logoSrc'],

data:()=>{

return {

}

},

mounted() {

console.log(this.$parent)

}

})

// header组件 组件调用 provie inject传值

Vue.component("buttoncounter", {

template: `

{{header}}

`,

provide:{

logoSrc:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1582433251882&di=de459decf2e157552b97a4879ae4135d&imgtype=0&src=http%3A%2F%2Fwww.suntop168.com%2Fblog%2Fzb_users%2Fupload%2F2014%2F2%2Fadf89182.jpg'

},

data:()=>{

return {

header:'我是头部导航栏'

}

},

mounted() {

console.log(this.$parent)

}

});

// vue根实例

let vm = new Vue({

el:"#app",

data:{

name: 'Marry'

},

mounted(){

console.log('vue根实例初始化完毕')

}

})

console.log(vm);

以上这篇Vue 实现创建全局组件,并且使用Vue.use() 载入方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

vue怎么自己创建组件并引用_Vue 实现创建全局组件,并且使用Vue.use() 载入方式相关推荐

  1. 三、Vue组件化开发学习笔记——组件化的基本步骤、全局组件和局部组件、父组件和子组件、注册组件的语法糖、模板分离写法、组件的数据存放

    一.什么是组件化? 人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能一次性搞定一大堆的内容. 但是,我们人有一种天生的能力,就是将问题 ...

  2. antd 函数组件_react函数组件中引用antd<Form/>组件demo

    ```xml import React, { forwardRef, useEffect } from 'react'; import { Input, Select, Row, Col, Butto ...

  3. html input dropdown,Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件

    带下拉选项的输入框 (Textbox with Dropdown) 是既允许用户从下拉列表中选择输入又允许用户自由键入输入值.这算是比较常见的一种 UI 元素,可以为用户提供候选项节省操作时间,也可以 ...

  4. VueJS组件之全局组件与局部组件

    全局组件 所有实例都能用全局组件. HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  5. 组件基础-全局组件//全局组件的简写

    组件基础-全局组件 <!DOCTYPE html> <html lang="en"><head><meta charset="U ...

  6. uni-app注册全局组件

    有一些组件可能会被很多个页面使用到,比如说,自定义的导航栏,如果在每一个页面都引用一次就很麻烦了,这个时候可以将该组件注册为全局组件了 有两种方法可以注册为全局组件 第一种是 easycom组件模式 ...

  7. 使用uniapp注册全局组件

    首先我们要在全局  注册全局组件 创建一个组件后 在main.js文件下 当然注册组件首先要新建一个组件目录然后引入. //注册全局组件 //首先在文件下创建一个组件 import global fr ...

  8. uni-app注册全局组件 - 符合easycom

    通知 本文已过时,HBuilderX已发布新的自定义组件方法:uni_modules 本文的/components/xx/xx.vue会在新版uni-app中与原生ui组件冲突. 新方法详见: [we ...

  9. vue 公用页面引用_vue中实现部分页面引入公共组件

    前言 我们可以把公共组件放到App.vue中,但是有时候我们希望某个页面不需要这写公共部分,那么需要怎么设置呢? 本文为大家介绍三种部分页面引入公共组件的方法. 方法一:利用子路由 创建一个layou ...

最新文章

  1. ansible自己总结(playbook)
  2. 如何将Sql Server中的数据表导入到PowerDesigner中
  3. jvm性能调优 - 01类加载机制Review
  4. oracle 出参类型定义,Oracle plsql出参clob类型的操作
  5. 最全总结!聊聊 Python 发送邮件的几种方式
  6. 1600k 打印头测试软件,更换LQ-1600K打印头断针的技巧
  7. 4.21-4.26旅行记之山城重庆(二)
  8. 已知原函数和导函数的关系_根据函数表达式该如何求函数值
  9. python 读取地震道头数据_通过计算机编程快速读取地震数据的方法
  10. QT基础学习笔记 Demo06
  11. WPF3D贴图:用C#搓一个地球
  12. 学习笔记三十一:IO流(三)
  13. Position属性值的相关解析
  14. 一位实习生对软件测试的看法
  15. Automatic multiorgan segmentation in thorax CT images using U-net-GAN
  16. centos 6.4 163yuan
  17. solidworks开发语言php,Solidworks开发语言对比及分析
  18. KeyTool与OpenSSL生成证书
  19. 米饭 低 gi 高 gi 指数
  20. 什么是BCD码?BCD码的用处。怎么把BCD码转换成二进制值?

热门文章

  1. SAP Leonardo机器学习如何获取模型存储的实际地址
  2. Java Spring log源代码学习
  3. 如何用SAP Cloud for Customer的手机App创建销售订单
  4. 使用JavaScript调用手机平台上的原生API
  5. 使用ABAP和JavaScript代码生成PDF文件的几种方式
  6. mac 安装php5.6 redis 扩展,centos6.5环境 安装php5.6的redis扩展
  7. Java入门算法(贪心篇)丨蓄力计划
  8. 【性能测试】性能测试基础:性能测试的概念、分类、场景和设计要点
  9. 贵州大学计算机科学研究所,贵州大学计算机科学与技术学院
  10. 复制出来的文本都是大写_vi或vim怎么复制粘贴