vue3.0 CLI - 2.6 - 组件的复用入门教程


Posted in Javascript onSeptember 14, 2018

我的 github 地址 - vue3.0Study - 阶段学习成果都会建立分支。

==========================

定义一个基础组件

这个基础组件,是导航条中 可以复用 的基础组件 单个导航。

基础组件【导航组件】基础的功能是能够显示文字,单击的交互方式。明确任务目标之后,进行开发。

在 component 目录下新建 Base 目录,Base 下新建文件 TopNav.vue。加入如下代码:

<template>
 <div class="topnav">
  {{title}}
 </div>
</template>
<script>
export default {
 name: 'topnav',
 props: ['title'],
 data: function () { return {
  text: '导航条'
 } }
}
</script>

在 About.vue 中加入以下红色部分的代码:

<template>
 <div class="about">
 <top-nav title="推荐"/>
 <HelloWorld msg="vue 官方相关资料的链接"/>
 </div>
</template>
<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
import TopNav from '@/components/Base/TopNav.vue'
export default {
 name: 'home',
 components: {
 HelloWorld, TopNav
 }
}
</script>

通过以上两步,就在 About.vue 中引入新组件 TopNav。其实 HelloWorld 也是可以复用的。

所谓的复用是啥意思呢?如下:

<top-nav title="推荐"/>
<top-nav title="军事"/>
<top-nav title="社会"/>
<top-nav title="科技"/>

这既是所谓的复用啦。 title 是 TopNav.vue 的 props 属性中的内容。以上看出,props 是一个数组,里边每个元素,是一个将要从父组件中传递过来的【变量】,对,变量,就是这么理解。

上篇文章提到过 全局注册 和 局部注册;这个例子,是 【局部注册组件】。在把它变为【全局注册组件】之前,先 git push 一下。

好的,在变【全局】之前,有个问题:全局 和 局部 有什么区别?

上面的例子看见了,要用 HelloWorld 或 TopNav,必须先 import。而全局的,不用 import。

把组件变为全局组件

任何模块 ( 这时候把组件理解为模块 ) 不可能不用 import 就可以用,全局注册组件,只是在 main.js 中进行 import,然后通过 Vue.component( params ) 这个函数进行全局注册。

所以全局注册组件也并不神秘,在 main.js 加入如下代码:

import TopNav from '@components/Base/TopNav'
Vue.component('TopNav', TopNav)

注意:Vue.component('TopNav', TopNav) 必须在  new Vue({ router, store, render: h => h(App) }).$mount('#app') 也就是根组件实例化之前定义。

然后去掉 About.vue 中 TopNav.vue 的引入:

<template><div class="about">
 <top-nav title="推荐"/>
 <top-nav title="军事"/>
 <top-nav title="社会"/>
 <top-nav title="科技"/>
 <HelloWorld msg="vue 官方相关资料的链接"/>
</div></template>
<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
// import TopNav from '@/components/Base/TopNav.vue'
export default {
 name: 'home',
 components: {
 HelloWorld
 }
}
</script>

运行代码,可以发现并未报错。

这就是全局注册。还是有个问题,大型项目基础组件多起来,这 main.js 便不好看。下面介绍的方法可以只用数十行代码,就可以解决。

首先引入两个 lodash 模块:

import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'

通过以下代码可以找到包含基础模块的所有文件:

const requireComponent = require.context(
 /* 在 ./components/Base 文件夹中寻找基础模块 */
 './components/Base',
 /* 是否包含子文件夹 */
 true,
 /* 只要是 .vue 结尾的文件都是基础模块 */
 /[\w-]+\.vue$/
)

下一步便是遍历进行模块 import:

/* 对这个文件集合进行遍历 - import - 全局注册 */
requireComponent.keys().forEach(fileName => {
 /* 获取组件配置 */
 const componentConfig = requireComponent(fileName)
 /* 从文件名中得到组件名 */
 const componentName = upperFirst(
 camelCase(
  fileName
  /* 移除开头的 "./_" */
  .replace(/^\.\/_/, '')
  /* 去掉文件的后缀名,也即 .vue */
  .replace(/\.\w+$/, '')
 )
 )
 /* 全局注册组件 */
 Vue.component(componentName, componentConfig.default || componentConfig)
})

这样 './components/Base' 目录下的 *.vue 组件会自动被引入并注册为 全局组件。

==========================

组件的复用便介绍到这里,相关代码也已经上传至 GitHub.

总结

以上所述是小编给大家介绍的vue3.0 CLI - 2.6 - 组件的复用入门教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
一段实时更新的时间代码
Jul 07 Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
Dec 25 Javascript
用jquery中插件dialog实现弹框效果实例代码
Nov 15 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
jQuery实现的分子运动小球碰撞效果
Jan 27 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 Javascript
ionic 自定义弹框效果
Jun 27 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
vue项目中自定义video视频控制条的实现代码
Apr 26 Javascript
vue点击标签切换选中及互相排斥操作
Jul 17 Javascript
jquery插件实现代码雨特效
Apr 24 jQuery
在vue项目中使用md5加密的方法
Sep 14 #Javascript
在vue项目中引用Iview的方法
Sep 14 #Javascript
详解webpack-dev-server使用方法
Sep 14 #Javascript
JS 实现微信扫一扫功能
Sep 14 #Javascript
详解webpack2异步加载套路
Sep 14 #Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
Sep 14 #Javascript
react项目实践之webpack-dev-serve
Sep 14 #Javascript
You might like
PHP4引用文件语句的对比
2006/10/09 PHP
PHP STRING 陷阱原理说明
2010/07/24 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
Javascript变量函数浅析
2011/09/02 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
python生成ppt的方法
2018/06/07 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
python面试题之列表声明实例分析
2019/07/08 Python
python实现猜拳游戏
2020/03/04 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
集体备课反思
2014/02/12 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
经典祝酒词大全
2015/08/12 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
Vue2.0搭建脚手架
2022/03/13 Vue.js