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中$this和$(this)的区别介绍(一看就懂)
Jul 06 Javascript
javascript页面倒计时实例
Jul 25 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
Aug 24 Javascript
js实现select下拉框菜单
Dec 08 Javascript
实用又漂亮的BootstrapValidator表单验证插件
May 30 Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 Javascript
vue展示dicom文件医疗系统的实现代码
Aug 27 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
VSCode搭建React Native环境
May 07 Javascript
Vue 同步异步存值取值实现案例
Aug 05 Javascript
如何在 ant 的table中实现图片的渲染操作
Oct 28 Javascript
js实现简单商品筛选功能
Feb 02 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
世界上第一台立体声收音机
2021/03/01 无线电
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
微信支付开发发货通知实例
2016/07/12 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python 实现登录网页的操作方法
2018/05/11 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
团员个人的自我评价
2013/12/02 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
行政复议决定书
2015/06/24 职场文书
2016年春节问候语
2015/11/11 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
python模板入门教程之flask Jinja
2022/04/11 Python