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 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
JS Array对象入门分析
Oct 30 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
JQuery用户名校验的具体实现
Mar 18 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
C#实现将一个字符转换为整数
Dec 12 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
Aug 07 Javascript
Webpack的Loader和Plugin的区别
Nov 09 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 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中error_log()函数的使用方法
2015/01/20 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
使用Python的判断语句模拟三目运算
2015/04/24 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
大整数数相乘的问题
2012/07/22 面试题
初中同学会活动方案
2014/08/22 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
Python基础之元编程知识总结
2021/05/23 Python
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python