百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Vue前端开发——组件篇 vue前端组件库

liebian365 2024-12-30 05:08 13 浏览 0 评论

业务开发的过程中,经常会进行一些组件化的开发,组件常处理的一般有以下几种

  1. 全局组件
  2. 局部组件
  3. 动态组件
  4. 递归组件

全局组件

一般很多地方都会用到的一些功能我们一般封装成全局组件去使用,常规的建立一个全局组件的方法是,公共组件放到components 目录文件下使用Vue.component去注册组件,然后在main.js 中去导入这个公共文件夹

// demo
import Vue from "vue";
import layoutDemo from "./layoutDemo"
Vue.component("tao-layout-demo", layoutDemo);
// main.js 中导入components文件夹

然后页面中就可以直接使用这个组件了
<tao-layout-demo><tao-layout-demo

组件少的时候这样使用没啥意见,如果声明的组件多了每个都要这样去导入注册代码就有点不简洁了,我们可以使用require.context 去遍历文件自动注册


通过require.context 遍历目录下component.vue 或者component.js 的文件,根据组件name 属性作为组件名称,动态注册,当然了如果不规矩文件名为component 可以扫描所有的.vue文件,require.context这个还挺实用的,很多场景会遇到如注册遍历api、全局过滤器等

局部组件

一些只服务当前页面的功能,一般拆分成局部组件去使用,至于什么样的功能需要拆分组件使用,可根据功能结构拆分,比如你的页面整体结构有上中下三层每层中有会有其他的功能交互,这样的建议拆分,如果页面单一也没有业务交互,没必要拆分。

import designPage from "./designPage"

export default {
  	components: {
     designPage 
    }
}
// 或者
export default {
  	components: {
      designPage: () => import('./designPage') 
    }
}

动态组件

常见的在列表界面中有增删改查详情的功能操作,不同操作对于不同的组件,这个时候如果普通组件加载的话你要在界面中每个组件都加入还要加if判断要操作的相应的那个组件就比较复杂繁琐了

<template>
   <div>
  			.... 业务
        <demo1  v-if="1"/>
         ....
   </div>
 </template>

动态组件就比较爽了,根据你is 指定的名称渲染组件

<component is="page-one"></component>


递归组件

这个的场景在后台管理软件中最常见,如侧边栏菜单渲染的时候,递归就是根据一个条件自己掉自己,vue中每个页面都可以作为自身的组件调用,组件名称就是name 属性指定的名字,需要注意name 属性一定要加,不然没作用,下面示例渲染侧边菜单


组件通讯及事件处理

父子组件通讯

-简单一句话就是:父组件v-bing 绑定子组件props接收 this.$emit 触发时间父组件v-on 接收

  1. 父组件传递
// 传递所有属性
<button v-bind:="value"></button>
// 传递指定参数
<button :name="value"></button>

// 也可以通过ref 直接赋值
<button ref="demo"></button>

this.$refs.demo.name ="xxx" // 前提是子组件中 一定有name 这个字段属性
  1. 子组件接收

子组件通过pops 接收父组件传递过来的值,props 有两种方式数组和对象

export default {
   props: {
      name: {
       		type: String ,
          default:"默认值"
      }
   }
}
  1. 子组件传值给父组件
export default {
   methods: {
    	handleAdd() {
					this.$emit('click','add')
      }
   }
}

其他组件传值处理一般采用事件总线或者vuex,事件总线一般就是说是一个所有组件共用的事件中心,所有组件你要发还是接收数据都平行的通过我去处理

怎样使用事件总线

  1. 创建eventBus.js 文件
import Vue from 'vue'
export const eventBus = new Vue()
  1. 把这个js 挂载到原型链上
Vue.prototype.$eventBus = new Vue()
  1. 使用: 我们一个组件触发了add方法,另一个组件中需要得到这个值//

// 发送
handleAdd(data) {
      this.$eventBus.$emit('add', data)
    }
// 接收
mounted() {
    this.$eventBus.$on('add', val => {
      console.log(val, 'val')
    })
  }

vuex后面计划单独拿出来写一篇文章,本文不写了

混入(mixins)和继承(extends)

这两个几乎相同,又有点不同,混入可以多个,继承只能一个,都能把公共的一些属性及方法提取出来

mixins: [ initData ]
-----------------------------
 extends: initData

比如你好几个组件都要用到v-model 绑定参数,可以新建个extends-config.js

import vueJsonEditor from "vue-json-editor";
export default {
  props: {
    value: {}
  },
  components: {
    vueJsonEditor
  },
  computed: {
    schemaConfig: {
      get() {
        return this.value;
      },
      set(val) {
        this.$emit("input", val);
      }
    },
    options() {
      return this.$attrs.options;
    }
  },
  methods: {
    event(type, value) {
      this.$emit(type, value);
    }
  }
};

这样在组件中就可以继承这个文件了,不用单独的定义变量和函数方法了

<template>
  <div style="width:100%">
    	<input v-model="schemaConfig" @input="event('input'schemaConfig, />
   </div>
<script>
import settingExtend from '../extends/setting.js'
export default {
  name: 'base-config',
  extends: settingExtend
}
</script>

最后再说下组件生命周期执行顺序吧


- 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

- 父beforeUpdate->子beforeUpdate->子updated->父updated
- 影响到子组件: - 父beforeUpdate -> 子beforeUpdate->子updated -> 父updted
- 不影响子组件: - 父beforeUpdate -> 父updated
- 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: