vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html

我的 github 地址 - vue3.0Study - 阶段学习成果都会建立分支。

==========================

定义一个基础组件

这个基础组件,是导航条中 可以复用 的基础组件 单个导航。

基础组件【导航组件】基础的功能是能够显示文字,单击的交互方式。明确任务目标之后,进行开发。

在 component 目录下新建 Base 目录,Base 下新建文件 TopNav.vue。加入如下代码:

  1. <template>
  2. <div class="topnav">
  3. {{title}}
  4. </div>
  5. </template>
  6.  
  7. <script>
  8.  
  9. export default {
  10. name: 'topnav',
  11. props: ['title'],
  12. data: function () { return {
  13. text: '导航条'
  14. } }
  15. }
  16. </script>

在 About.vue 中加入以下红色部分的代码:

  1. <template>
  2. <div class="about">
  3. <top-nav title="推荐"/>
  4. <HelloWorld msg="vue 官方相关资料的链接"/>
  5. </div>
  6. </template>
  7.  
  8. <script>
  9. // @ is an alias to /src
  10. import HelloWorld from '@/components/HelloWorld.vue'
  11. import TopNav from '@/components/Base/TopNav.vue'
  12.  
  13. export default {
  14. name: 'home',
  15. components: {
  16. HelloWorld, TopNav
  17. }
  18. }
  19. </script>

通过以上两步,就在 About.vue 中引入新组件 TopNav。其实 HelloWorld 也是可以复用的。

所谓的复用是啥意思呢?如下:

  1. <top-nav title="推荐"/>
  2. <top-nav title="军事"/>
  3. <top-nav title="社会"/>
  4. <top-nav title="科技"/>

这既是所谓的复用啦。 title 是 TopNav.vue 的 props 属性中的内容。以上看出,props 是一个数组,里边每个元素,是一个将要从父组件中传递过来的【变量】,对,变量,就是这么理解。

上篇文章提到过 全局注册 和 局部注册;这个例子,是 【局部注册组件】。在把它变为【全局注册组件】之前,先 git push 一下。

好的,在变【全局】之前,有个问题:全局 和 局部 有什么区别?

上面的例子看见了,要用 HelloWorld 或 TopNav,必须先 import。而全局的,不用 import。

把组件变为全局组件

任何模块 ( 这时候把组件理解为模块 ) 不可能不用 import 就可以用,全局注册组件,只是在 main.js 中进行 import,然后通过 Vue.component( params ) 这个函数进行全局注册。

所以全局注册组件也并不神秘,在 main.js 加入如下代码:

  1. import TopNav from '@components/Base/TopNav'
  2. Vue.component('TopNav', TopNav)

注意:Vue.component('TopNav', TopNav) 必须在  new Vue({ router, store, render: h => h(App) }).$mount('#app') 也就是根组件实例化之前定义。

然后去掉 About.vue 中 TopNav.vue 的引入:

  1. <template><div class="about">
  2. <top-nav title="推荐"/>
  3. <top-nav title="军事"/>
  4. <top-nav title="社会"/>
  5. <top-nav title="科技"/>
  6. <HelloWorld msg="vue 官方相关资料的链接"/>
  7. </div></template>
  8.  
  9. <script>
  10. // @ is an alias to /src
  11. import HelloWorld from '@/components/HelloWorld.vue'
  12. // import TopNav from '@/components/Base/TopNav.vue'
  13.  
  14. export default {
  15. name: 'home',
  16. components: {
  17. HelloWorld
  18. }
  19. }
  20. </script>

运行代码,可以发现并未报错。

这就是全局注册。还是有个问题,大型项目基础组件多起来,这 main.js 便不好看。下面介绍的方法可以只用数十行代码,就可以解决。

首先引入两个 lodash 模块:

  1. import upperFirst from 'lodash/upperFirst'
  2. import camelCase from 'lodash/camelCase'

通过以下代码可以找到包含基础模块的所有文件:

  1. const requireComponent = require.context(
  2. /* 在 ./components/Base 文件夹中寻找基础模块 */
  3. './components/Base',
  4. /* 是否包含子文件夹 */
  5. true,
  6. /* 只要是 .vue 结尾的文件都是基础模块 */
  7. /[\w-]+\.vue$/
  8. )

下一步便是遍历进行模块 import:

  1. /* 对这个文件集合进行遍历 - import - 全局注册 */
  2. requireComponent.keys().forEach(fileName => {
  3. /* 获取组件配置 */
  4. const componentConfig = requireComponent(fileName)
  5. /* 从文件名中得到组件名 */
  6. const componentName = upperFirst(
  7. camelCase(
  8. fileName
  9. /* 移除开头的 "./_" */
  10. .replace(/^\.\/_/, '')
  11. /* 去掉文件的后缀名,也即 .vue */
  12. .replace(/\.\w+$/, '')
  13. )
  14. )
  15. /* 全局注册组件 */
  16. Vue.component(componentName, componentConfig.default || componentConfig)
  17. })

这样 './components/Base' 目录下的 *.vue 组件会自动被引入并注册为 全局组件。

==========================

组件的复用便介绍到这里,相关代码也已经上传至 GitHub.

纯小白入手 vue3.0 CLI - 2.6 - 组件的复用的更多相关文章

  1. 纯小白入手 vue3.0 CLI - 2.7 - 组件之间的数据流

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  2. 纯小白入手 vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...

  3. 纯小白入手 vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...

  4. 纯小白入手 vue3.0 CLI - 2.1 - 组件 ( component )

    vue3.0 CLI 真小白入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0Study  ...

  5. 纯小白入手 vue3.0 CLI - 3.3 - 路由的导航守卫

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  6. 纯小白入手 vue3.0 CLI - 3.2 - 路由的初级使用

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  7. 纯小白入手 vue3.0 CLI - 3.1 - 路由 ( router )

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  8. 纯小白入手 vue3.0 CLI - 2.5 - 了解组件的三维

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...

  9. 纯小白入手 vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...

随机推荐

  1. 域名直接访问应用程序-不加端口号&不加路径名

    当访问域名的时候,端口默认指定的是80: 而80端口在Linux系统下,1024之前的端口是只有root用户才能使用的, 因此将,系统层面将端口80 映射到8080, iptables -t nat ...

  2. ASP.NET状态管理的总结

    阅读目录 开始 hidden-input QueryString Cookie ApplicationState ViewState,ControlState Session Profile 各种状态 ...

  3. Spring Boot 静态资源映射与上传文件路由配置

    默认静态资源映射目录 默认映射路径 在平常的 web 开发中,避免不了需要访问静态资源,如常规的样式,JS,图片,上传文件等;Spring Boot 默认配置对静态资源映射提供了如下路径的映射 /st ...

  4. 制作windows服务

    1.下载winsw-1.8-bin.exe并更名: 2.配置winsw-1.8-bin.exe同上名<?xml version="1.0" encoding="UT ...

  5. iis7 bug解决

    只需重新注册下AspNet就可以了,具体步骤如下 1 打开运行,输入cmd进入到命令提示符窗口. 2 进入到C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727 ...

  6. Chapter 3 Phenomenon——21

    "Nobody will believe that, you know." “你知道吗没有人会相信会是这样的” His voice held an edge of derision ...

  7. mysql 删除单表内多个字段重复的数据

    mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...

  8. redis集群环境的搭建和错误分析

    redis集群环境的搭建和错误分析 redis集群时,出现的几个异常问题 09 redis集群的搭建 以及遇到的问题

  9. 页面打印pdf格式文件

    '<td><button type="button" class="btn btn-primary" data-loading-text=&q ...

  10. 老司机的应用级监控——spring actuator(转)

    转自:https://www.jianshu.com/p/c043d3c71f47 什么是spring actuator? 这是一个研发老司机与运维同学都会非常喜欢的东西,随着点融集团的扩张,点融网的 ...