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

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

liebian365 2024-12-30 05:08 19 浏览 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

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符&quot;

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: