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 相关文章推荐
js 手机号码合法性验证代码集合
Sep 29 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
Jun 16 Javascript
更快的异步执行(setTimeout多浏览器)
Aug 12 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
Jun 12 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
Feb 18 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 jQuery
javascript异步处理与Jquery deferred对象用法总结
Jun 04 jQuery
在weex中愉快的使用scss的方法步骤
Jan 02 Javascript
video.js添加自定义组件的方法
Dec 09 Javascript
在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
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
Python类属性的延迟计算
2016/10/22 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
Python实现KNN邻近算法
2021/01/28 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
python 编写简单网页服务器的实例
2018/06/01 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
python使用smtplib模块发送邮件
2020/12/17 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
如何使用PHP session
2015/04/21 面试题
为什么要使用servlet
2016/01/17 面试题
信息技术课后反思
2014/04/27 职场文书
减负增效提质方案
2014/05/23 职场文书
在校实习生求职信
2014/06/18 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
工作检讨书怎么写
2014/10/10 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
大学生活感想
2015/08/10 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
Python函数对象与闭包函数
2022/04/13 Python