自定义vue组件,一般是局部引用的方式载入,使用的时候,在应用的组件中使用 import moduleName from ‘module' 导入,在components中注册
<template> <div class="app-NewsInfo"> <h3>{{info.title}}</h3> <!-- 新闻评论子组件。 --> <comment :id="id"></comment> </div> </template> <script> import comment from "../sub/comment.vue"; export default { data() { return { info: {}, id: this.$route.query.id }; }, methods: {}, components: { comment }, </script>
那么如果某个组件经常复用,岂不是每次在新组建中引用都要导入一次吗?是的 。这种情况下可以将组件封装成全局组件,一次导入之后,全局都可以使用。 虽然这种做法不太常见,但是这里还是将其整理出来。
1.首先创建一个文件夹loading
用来保存需要全局引用的组件,并且存放一些配置文件。
2.创建一个loading.vue的组件。
该组件中除了组件的基础结构,并无其他内容。它的作用是用来加载准备自定义的组件,最后将loading组件加载到全局的Vue中,这样就一次性完成了所有自定义组件的加载,非常方便。
<template> <div class="loading"></div> </template> <script> export default { data() { return {}; }, methods: {} }; </script> <style scoped> </style>
3.创建自定义组件
这里以一个简单封装的mint-ui轮播图为例。
<template> <div class="app-turns"> <mt-swipe :auto="4000"> <mt-swipe-item v-for="(item,i) of list" :key="i"> <img :src="/UploadFiles/2021-04-02/item.img_url">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.在需要使用的地方,直接使用组件名即可。
<template> <div class="app-home"> <turns :list="list"></turns> </div> </template>通过这种方式,就能实现组件的全局引用。
这种做的好处是对于复用性非常高的组件,省去了每次导入的麻烦;
缺点是无法直观的看到组件引入和注册,对于不清楚的人来说看不懂组件名的意义。
其实官方文档中已经提到了一种解决方案:
https://cn.vuejs.org/v2/guide/components-registration.html#基础组件的自动化全局注册
基础组件的自动化全局注册
可能你的许多组件只是包裹了一个输入框或按钮之类的元素,是相对通用的。我们有时候会把它们称为基础组件,它们会在各个组件中被频繁的用到。
所以会导致很多组件里都会有一个包含基础组件的长列表:
import BaseButton from ‘./BaseButton.vue' import BaseIcon from ‘./BaseIcon.vue' import BaseInput from ‘./BaseInput.vue' export default { components: { BaseButton, BaseIcon, BaseInput } }而只是用于模板中的一小部分:
<BaseInput v-model=“searchText” @keydown.enter=“search” />
<BaseButton @click=“search”>
幸好如果你使用了 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: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>', data: function () { return { firstName: 'Walter', lastName: 'White', alias: 'Heisenberg' } } }) // 创建 Profile 实例,并挂载到一个元素上。 new Profile().$mount('#opp') let navbar = { template: `<div class='nav'> <input type="text" placeholder="请输入关键字"/> </div>`, 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: `<div class='logo'> <img v-bind:src="/UploadFiles/2021-04-02/logoSrc">以上这篇Vue 实现创建全局组件,并且使用Vue.use() 载入方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]