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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
JavaScript继承方式实例
Oct 29 Javascript
克隆javascript对象的三个方法小结
Jan 12 Javascript
jquery 插件学习(四)
Aug 06 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
web css实现整站样式互相切换
Oct 29 Javascript
js菜单点击显示或隐藏效果的简单实例
Jan 13 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
Oct 22 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 Javascript
对vux点击事件的优化详解
Aug 28 Javascript
Vue动态生成表格的行和列
Jul 18 Javascript
vue3弹出层V3Popup实例详解
Jan 04 Vue.js
在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 全局变量范围分析
2009/08/07 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
js自定义弹框插件的封装
2020/08/24 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
Python标准库os.path包、glob包使用实例
2014/11/25 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
中班幼儿评语大全
2014/04/30 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
电子专业自荐信
2014/07/01 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技