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 相关文章推荐
通过jquery实现tab标签浏览效果
Feb 20 Javascript
关于document.cookie的使用javascript
Apr 11 Javascript
JavaScript中几种常见排序算法小结
Feb 22 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
js实现鼠标经过表格行变色的方法
May 12 Javascript
js判断所有表单项不为空则提交表单的实现方法
Sep 09 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
Sep 07 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 Javascript
详解Vue底部导航栏组件
May 02 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
JScript的条件编译
2007/05/29 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
微信小程序签到功能
2018/10/31 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python和php哪个更适合写爬虫
2020/06/22 Python
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
企业办公室岗位职责
2014/03/12 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
优秀毕业生求职信
2014/06/05 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
公司租房协议书范本
2014/10/08 职场文书
代办出身证明书
2014/10/21 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
网络营销计划
2015/01/17 职场文书
运动会广播稿300字
2015/08/19 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
用Python生成会跳舞的美女
2022/01/18 Python
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技