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 相关文章推荐
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
Sep 22 Javascript
如何通过javascript操作web控件的自定义属性
Nov 25 Javascript
Seajs的学习笔记
Mar 04 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
javascript实现控制文字大中小显示
Apr 28 Javascript
JavaScript中的getMilliseconds()方法使用详解
Jun 10 Javascript
Vue概念及常见命令介绍(1)
Dec 08 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
浅谈angular4生命周期钩子
Sep 05 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
vue和webpack安装命令详解
Jun 15 Javascript
vue将单页面改造成多页面应用的方法
Nov 25 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不使用插件导出excel的简单方法
2014/03/04 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
py2exe 编译ico图标的代码
2013/03/08 Python
在python中的socket模块使用代理实例
2014/05/29 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
python3.7.0的安装步骤
2018/08/27 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
Delphi CS笔试题
2014/01/04 面试题
艺术系应届生的自我评价
2013/10/19 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
授权委托书格式
2014/07/31 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
租车协议书范本2014
2014/11/17 职场文书
承诺函范文
2015/01/21 职场文书
义卖募捐活动总结
2015/05/09 职场文书
汽车销售合同文本
2019/08/08 职场文书