Vue组件化开发--公共组件的封装

在Vue中,组件是构建用户界面的基本单位。封装公共组件是一种良好的实践,可以提高代码的可复用性和可维护性。下面是一个示例,演示了如何封装一个公共的按钮组件。

首先,创建一个名为Button.vue的Vue组件文件。这个组件将封装一个可定制的按钮,具有不同的样式和点击事件。在Button.vue文件中,编写以下代码:

<template><button :class="classes" @click="onClick"><slot></slot></button>
</template><script>
export default {name: 'Button',props: {type: {type: String,default: 'default'},size: {type: String,default: 'medium'}},computed: {classes() {return ['button', `button-${this.type}`, `button-${this.size}`];}},methods: {onClick() {this.$emit('click');}}
};
</script><style scoped>
.button {padding: 8px 16px;border-radius: 4px;cursor: pointer;
}.button-default {background-color: #ccc;color: #333;
}.button-primary {background-color: #007bff;color: #fff;
}.button-success {background-color: #28a745;color: #fff;
}.button-danger {background-color: #dc3545;color: #fff;
}.button-small {font-size: 12px;
}.button-medium {font-size: 14px;
}.button-large {font-size: 16px;
}
</style>

在上面的代码中,我们定义了一个名为Button的Vue组件。该组件接受两个属性:typesize,分别表示按钮的样式和尺寸。默认情况下,按钮的样式是default,尺寸是medium

在模板中,我们使用:class绑定动态类,根据typesize属性来设置按钮的样式类。使用@click绑定点击事件,并使用<slot>插槽来允许在按钮中插入自定义内容。

在计算属性classes中,我们根据属性值动态生成类名数组。按钮的样式类由buttonbutton-${this.type}组成,尺寸类由button-${this.size}组成。

在方法onClick中,我们触发一个自定义事件click,以便在使用该组件的地方可以监听按钮的点击事件。

最后,在样式中,我们定义了按钮的基本样式和不同样式的类。

现在,我们可以在其他Vue组件中使用这个公共按钮组件。例如,假设我们有一个名为App.vue的根组件,我们可以在模板中使用<Button>标签来使用按钮组件:

<template><div><Button type="primary" size="large" @click="handleClick">Click me</Button></div>
</template><script>
import Button from './Button.vue';export default {name: 'App',components: {Button},methods: {handleClick() {alert('Button clicked');}}
};
</script>

在上面的代码中,我们导入了Button组件,并在components选项中注册它。然后,我们在模板中使用<Button>标签,并设置typesize属性。我们还监听了按钮的点击事件,并在handleClick方法中弹出一个提示框。

通过这种方式,我们可以在整个应用程序中重复使用这个公共按钮组件,而不必重复编写样式和事件处理逻辑。

这个示例演示了如何封装一个公共的按钮组件,并在其他组件中使用它。通过封装公共组件,我们可以提高代码的可复用性和可维护性,并促进团队协作和开发效率。

全局组件和局部组件

Vue中有两种方式来使用组件:全局组件和局部组件。

全局组件是在Vue应用程序中全局注册的组件,可以在任何地方使用。全局组件可以在根组件或任何子组件中使用,而不需要额外的导入或注册步骤。要创建一个全局组件,可以使用Vue.component方法来定义组件并注册它。

例如,假设我们有一个名为Button的组件,我们可以在根组件中使用Vue.component来注册它作为全局组件:

// main.jsimport Vue from 'vue';
import Button from './Button.vue';Vue.component('Button', Button);new Vue({// ...
});

在上面的代码中,我们导入了Button组件,并使用Vue.component方法将其注册为全局组件。现在,我们可以在任何地方使用<Button>标签来使用这个全局组件。

// App.vue<template><div><Button></Button></div>
</template><script>
export default {// ...
};
</script>

局部组件是在Vue组件中局部注册的组件,只能在该组件内部使用。局部组件需要在组件的components选项中注册。局部组件只能在该组件的模板中使用,而无法在其他组件中使用。

例如,假设我们有一个名为App的根组件,我们可以在components选项中注册Button组件作为局部组件:

<template><div><Button></Button></div>
</template><script>
import Button from './Button.vue';export default {name: 'App',components: {Button},// ...
};
</script>

在上面的代码中,我们导入了Button组件,并在components选项中注册它作为局部组件。现在,我们可以在App组件的模板中使用<Button>标签来使用这个局部组件。

通过全局组件和局部组件,我们可以在Vue应用程序中使用组件来封装可复用的功能和界面元素。全局组件适用于多个组件之间共享的组件,而局部组件适用于单个组件内部使用的组件。选择使用全局组件还是局部组件取决于具体的应用场景和需求。

脚手架vue-cli中的组件

在Vue CLI中创建的项目中,组件的使用方式稍有不同。Vue CLI是一个官方提供的用于快速搭建Vue项目的脚手架工具,它提供了一些默认的项目结构和配置。

在Vue CLI中,我们可以使用单文件组件(Single File Components)来定义和使用组件。单文件组件将模板、脚本和样式都放在一个文件中,使得组件的结构更清晰,便于维护和管理。

在Vue CLI项目中,通常会在src目录下创建一个名为components的文件夹,用于存放组件文件。我们可以在该文件夹中创建一个新的组件文件,例如Button.vue

Button.vue文件中,我们可以使用<template>标签定义组件的模板,使用<script>标签定义组件的脚本,使用<style>标签定义组件的样式。例如:

<template><button class="button" @click="handleClick">{{ label }}</button>
</template><script>
export default {name: 'Button',props: {label: {type: String,required: true}},methods: {handleClick() {this.$emit('click');}}
};
</script><style scoped>
.button {background-color: blue;color: white;padding: 10px 20px;border-radius: 4px;
}
</style>

在上面的代码中,我们定义了一个名为Button的组件。组件有一个label属性,用于显示按钮的文本。当按钮被点击时,会触发handleClick方法,并通过$emit方法触发一个名为click的自定义事件。

要在其他组件中使用Button组件,我们需要在目标组件中导入它,并在components选项中注册它。例如,在App.vue组件中使用Button组件:

<template><div><Button label="Click me" @click="handleButtonClick"></Button></div>
</template><script>
import Button from './components/Button.vue';export default {name: 'App',components: {Button},methods: {handleButtonClick() {alert('Button clicked');}}
};
</script>

在上面的代码中,我们导入了Button组件,并在components选项中注册它。然后,在模板中使用<Button>标签来使用这个组件,并设置label属性和监听click事件。

通过这种方式,我们可以在Vue CLI项目中创建和使用组件。单文件组件使得组件的定义和使用更加清晰和方便,有助于提高代码的可维护性和可复用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js相关的npm包的集合

一、实用功能 1. qs 一个简单易用的字符串解析和格式化库 2.rxjs RxJS是一组模块化的库&#xff0c;用于使用 JavaScript 中的可观察集合和组合来组合异步和基于事件的程序。 3. mitt 微型 200b 功能事件发射器/发布订阅. 4.Underscore.js Underscore.js是一个用于 JavaScript…

Linux C++ 链接数据库并对数据库进行一些简单的操作

一.引言&#xff08;写在之前&#xff09; 在我们进行网络业务代码书写的时候&#xff0c;我们总是避免对产生的数据进行增删改查&#xff0c;为此&#xff0c;本小博主在这里简历分享一下自己在Linux中C语言与数据之间交互的代码的入门介绍。 二.代码书写以及一些变量和函数的…

Vue3 nodejs 安装和配置---vue3教程一

文章目录 前言1、nodejs安装2、配置缓存路径&#xff1a;3、 阿里镜像cnpm使用4、 yarn安装5、配置nodejs国内镜像6、查看各个版本7、node npm yarn概念8、nodejs 和vue 关系外传 前言 本人主做后端Java&#xff0c;以前搞全栈开发是&#xff0c;还没有vue,rect等前端框架&…

MGRE综合

实验 一、实验思路 1.先按照上图配置IP地址及环回 2.写缺省使公网可通 3.让R1、R4、R5每台路由器均成为中心站点形成全连网状结构拓扑 4.让R1成为中心站点R2R3为分支站点 5.分区域宣告ospf之后更改ospf在虚拟接口Tunnel工作方式为broadcast及让R1 当选DR 二、上虚拟机操作…

[CKA]考试之一个 Pod 封装多个容器

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 创建一个Pod&#xff0c;名字为kucc1&#xff0c;这个Pod包含4容器&#xff…

《向量数据库指南》——腾讯云向量数据库Tencent Cloud Vector DB正式上线公测!提供10亿级向量检索能力

8月1日,腾讯云向量数据库(Tencent Cloud Vector DB)已正式上线公测。在腾讯云官网上搜索“向量数据库”,就可以正式体验该产品。 腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、文本图像检索、自然语言处理等 AI 领域。…

Vue的 hash 模式与 history 模式

为了能够在改变视图的同时&#xff0c;不向后端发出网络请求。浏览器提供了 hash 模式与 history 模式。 而 vue 中的路由器就是利用了这两种模式&#xff0c;来实现前端路由的。 路由器的 hash 模式&#xff1a; 一、在 router 目录下的 index.js 文件中&#xff0c;通过 m…

JVM 学习—— 类加载机制

前言 在上一篇文章中&#xff0c;荔枝梳理了有关Java中JVM体系架构的相关知识&#xff0c;其中涉及到的有关Java类加载机制的相关知识并没有过多描述。那么在这篇文章中&#xff0c;荔枝会详细梳理一下有关JVM的类加载机制和双亲委派模型的知识&#xff0c;希望能够帮助到有需要…

时间复杂度接近O(n)的三种排序算法

1.桶排序 桶排序&#xff0c;顾名思义&#xff0c;会用到“桶”&#xff0c;核心思想是将要排序的数据分到几个有 序的桶里&#xff0c;每个桶内的数据再单独进行排序。桶内排完序之后&#xff0c;再把每个桶内的数据按照顺序依次 取出&#xff0c;组成的序列就是有序的了。 …

使用vue creat搭建项目

一、查看是否安装node和npm&#xff08;显示版本号说明安装成功&#xff09; node -v npm -v 显示版本号说明安装成功&#xff0c;如果没有安装&#xff0c;则需要先安装。 二、安装vue-cli脚手架 查看安装的版本&#xff08;显示版本号说明安装成功&#xff09; vue -V 三…

【雕爷学编程】 MicroPython动手做(35)——体验小游戏3

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

30. 利用linprog 解决 生产决策问题(matlab程序)

1.简述 线线规划的几个基本性质&#xff1a;【文献[1]第46页】 (1)线性规划问题的可行域如果非空&#xff0c;则是一个凸集-凸多面体&#xff1b; (2)如果线性规划问题有最优解&#xff0c;那么最优解可在可行域的顶点中确定&#xff1b; (3)如果可行域有界&#xff0c;且可行域…

企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势 tbms

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

tfserving

文章目录 部署测试模型传参优化 部署 docker run -dit -p 8501:8501 -p 8500:8500 -v /data1/minisearch/modelzoo/deepfm/models:/models/deepfm -e MODEL_NAMEdeepfm -e TF_CPP_MIN_VLOG_LEVEL1 $image_nameTF_CPP_MIN_VLOG_LEVEL1设置打印日志类型&#xff0c;如下 2023-0…

SpringBoot + ajax 实现分页和增删查改

0目录 1.SpringBoot 2.SpringBoot分页&#xff1b;增删改查 1.SpringBoot分页 创建数据库和表 创建SpringBoot工程&#xff0c;引入springboot下的分页依赖 配置application.yml 实体类 Mapper接口 Mapper.xml Service接口 Service实现类 控制层 测试 加…

Kotlin单例代码实例

目录 一、饿汉式的实现二、懒汉式的实现三、安全 懒汉式的实现四、双重校验DCL 的实现 一、饿汉式的实现 Kotlin版本 object SingletonDemoKt/*** 背后的逻辑代码&#xff1a;public final class SingletonDemoKt {public static final SingletonDemoKt INSTANCE;private Si…

新手Vite打包工具的使用并解决yarn create vite报错

一、手动创建 1.创建vite-Demo文件夹 2.初始化 yarn init -y 3.安装vite yarn add -D vite 4.打包准备 说明&#xff1a;不需要在src下面创建&#xff0c;在vite-Demo文件夹创建 4.1index.js文件 document.body.insertAdjacentHTML("beforeend","<h1>…

Linux6.30 Kubernetes 基础

文章目录 计算机系统5G云计算第一章 LINUX Kubernetes 基础一、Kubernetes 概述1.K8S 是什么2.为什么要用 K8S3.Kubernetes 集群架构与组件4.核心组件——Master 组件1&#xff09;Kube-apiserver2&#xff09;Kube-controller-manager3&#xff09;Kube-scheduler 5.核心组件—…

kafka生产者指定ip

kafka生产者指定ip 最近工作中遇到一个问题&#xff0c;记录一下&#xff0c;需求中要求往kafka上推送信息。本来是个很简单的需求&#xff0c;但是踩了一个坑。 ​ 我通过spring boot集成了kafka写了一个生产者&#xff0c;客户那边给我三个节点的ip&#xff0c;然后我也没多想…

【uniapp APP隐藏顶部的电量,无线,时间状态栏与导航栏】

uniapp APP隐藏顶部的电量&#xff0c;无线&#xff0c;时间状态栏 如下代码配置&#xff08;在一个页面设置这个段代码&#xff0c;所有页面都会消失&#xff09; onShow() {// #ifdef APP-PLUS// 隐藏顶部电池,时间等信息 plus.navigator.setFullscreen(true);//隐藏虚拟按…