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判断横竖屏及禁止浏览器滑动条示例
Apr 29 Javascript
Jquery Ajax方法传值到action的方法
May 11 Javascript
php常见的页面跳转方法汇总
Apr 15 Javascript
javascript实现仿腾讯游戏选择
May 14 Javascript
JavaScript检查数字是否为整数或浮点数的方法
Jun 09 Javascript
javascript实现框架高度随内容改变的方法
Jul 23 Javascript
JavaScript基础知识之方法汇总结
Jan 24 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
Vue实现一个图片懒加载插件
Mar 11 Javascript
小程序中this.setData的使用和注意事项
Aug 28 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP MSSQL 分页实例
2016/04/13 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
JavaScript实现密码强度实时验证
2020/03/18 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
对python周期性定时器的示例详解
2019/02/19 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
python自动化办公操作PPT的实现
2021/02/05 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
如何进行Linux分区优化
2013/02/12 面试题
银行自荐信怎么写
2015/03/05 职场文书
学校教代会开幕词
2016/03/04 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers