当前位置: 首页 > news >正文

Vue组件基础

Vue组件基础是DOM+DOM+js前端组成下的页面布局区域划分,每个组件展示时都要在页面上有一定的大小。每个设定好的页面区域都可以定义Vue的组件,组件中包含了HTML模板、样式、Vue组件对象的定义。Vue的组件是包含页面设计在内的,是一种为页面某个设计区域提供独立支撑的解决方案或实例。

1、组件的定义

     组件一般通过单文件来定义,文件后缀名为“.vue”。无论组件是使用构建的方式还是不适用构建的方式,组件的定义中通常包含三个部分,分别是HTML的模板、style、Vue组件对象。使用构建的方式构建组件,最后也可以通过build的方式将工程内容转换为静态的非构建方式组件。组件的定义格式可参照如下:

<script setup lang="ts">
// 添加vue组件定义
</script><template>
<!-- 添加Vue组件对用的HTML模板 -->
</template><style>
/* 为HTML模板增加对用的class  */
</style>

2、组件的使用

    Vue组件的使用有两种不同的方式,第一种是组件直接引用的局部引用方式,另一种是组件的全局引用方式。组件的具备引用方式是组件定义完成后,不注册为Vue的全局对象,使用时需要找到对应的组件定义文件,显示的在使用处注明。如下所示:

<script setup lang="ts">
import StandardForm from './components/StandardForm.vue';  //引入
// 添加vue组件定义
</script><template>
<!-- 添加Vue组件对用的HTML模板 -->
<StandardForm/> <!-- 使用 -->
</template><style>
/* 为HTML模板增加对用的class  */
</style>

另一种方式为全局引用方式。在组件定义完成后,需要在整个工程初始化时明确的注册组件。组件注册完成后,这个组件就是全局组件。在使用时不需要显式的引入就可以直接使用。比较组件的局部引用和全局引用,局部引用需要明确组件的定义文件位置,全局引用不需要明确组件的定义文件位置,但是需要在使用前有明确的全局注册。组件全局注册和使用的案例如下:

//组件注册:
import { createApp } from 'vue'const app = createApp({})
app.component(// 注册的名字
'MyComponent',
// 组件的实现{/* add component code here */}
)//组件的使用:
<!--  在调用全局组件的HTML模板中,直接添加-->
<MyComponent/>

组件使用过程中,组件的来源对组件的使用有很大的影响。局部引用的组件因需要直接指明组件的定义文件位置,所以组件的之间的依赖关系非常明显;全局引用的组件需要注册组件,使用时不会指明组件定义文件的具体位置,当工程非常庞大或者维护的非常差时,组件的依赖关系就有些模糊。因此除了公共依赖的组件和提供公共支持功能的组件之外,不要做全局注册。

3、组件的自定义属性

     组件上的自定义属性时参照HTML标签设置的。在使用组件时,必须显式的给组件的自定义属性赋值。组件的自定义属性如下所示:

<script setup lang="ts">
defineProps<{msg: string
}>()
</script><template><div><h1>{{ msg }}</h1></div>
</template>

使用时如下:

<HelloWorld msg="You did it!" />

组件的自定义属性和组件内部的数据或状态是不同的,即便它们之间可能有交集。组件的自定义属性是给别的组件用的,组件内部的数据或状态是给组件自己用的。

4、组件上的监听事件

      组件上除了有自定义属性之外,还可以有自定义事件的句柄,例如在整个组件上定义的点击事件、双击事件、输入事件等。将整个组件视为整体的一个HTML标签,那么标签上的监听事件就是仿照正常HTML标签的事件做处理,如将组件上的事件句柄给予一个确定的事件名称,暴露给使用者。使用者给这个暴露出来的事件句柄提供对应的事件处理函数。以下为组件上监听事件的案例:

   带有自定义属性和自定义事件的组件,如下:

<script setup lang="ts">
defineProps<{msg: string
}>()
defineEmits<{(e:"aclick",msg:string): void   
}>()
</script><template><div @click="$emit('aclick')"><h1>{{ msg }}</h1></div>
</template>

使用这个组件的父组件,如下:

<script setup lang="ts">
import {ref} from "vue"
import HelloWorld from './components/HelloWorld.vue'const message=ref("You did it!");function triggerClickOnHelloWorld(){console.log("Hello world");message.value="Hello World!";  
}
</script><template><HelloWorld v-bind:msg="message" @aclick="triggerClickOnHelloWorld"/>
</template>

从以上案例可以看出,子组件中的自定义事件和自定义属性在父组件中是可以访问和处理的,子组件等同于一个独立不可拆分的HTML标签。父组件按照规则是不可以访问子组件内部的数据和状态,除非子组件的数据是作为自定义属性。

5、组件标签环绕的内容

      组件标签环绕的内容,类似于`<div>Hello Wrold</div>`,被环绕的内容也应该可以被组件解析。为了满足这种解析情况,Vue增加了插槽slot的标签,这个标签可以在组件定义时,指定环绕内容的位置。样例如下:

<script setup lang="ts">
defineProps<{msg: string
}>()
defineEmits<{(e:"aclick",msg:string): void
}>()
</script><template><div @click="$emit('aclick')"><h1>{{ msg }}</h1><slot></slot>  <!-- 指定插槽的位置--></div>
</template>

实际使用时的处理:

<script setup lang="ts">
import {ref} from "vue"
import HelloWorld from './components/HelloWorld.vue'const message=ref("You did it!");function triggerClickOnHelloWorld(){console.log("Hello world");message.value="Hello World!";  
}
</script><template><HelloWorld v-bind:msg="message" @aclick="triggerClickOnHelloWorld">This is the first slot</HelloWorld>
</template>

因为插槽实际的值是由使用组件的父组件确定,并有子组件的标签环绕,所有插槽的内容并不会在组件中变得混乱。当一个组件中有多个插槽时,那么在实际使用时,需要在组件环绕的内容中为每个插槽指定对应关系,如定义时名字a的插槽对应实际使用时名字为a的文段段落。更复杂一点,可能时动态的确定这种对应关系。

6、动态组件

    动态组件是指组件在页面上频繁切换,切换后,旧的组件内容将会被卸载掉。动态组件是利用类似于继承关系的原理,所有的组件都有公共的父类component,所有组件的定义都是component的子类,这样不同组件都是component的子类,所有的子类都是父类型的。在页面上使用component父类型时,需要使用is的动态属性指定其具体的实现子类型,即具体的组件。

<component :is="StandardForm"></component>

 需要动态切换类型时,只需要将具体的组件值用动态属性替换,动态属性受任意事件影响,其值在不同组件之间来回变动。这样就可以实现动态组件了。具体案例如下:

<script setup lang="ts">
import {shallowRef} from "vue"
import StudyVue from './components/StudyVue.vue';
import StandardForm from './components/StandardForm.vue';const currentComponent=shallowRef(StudyVue);function changeComp(){console.log("change component");if(StudyVue==currentComponent.value){currentComponent.value=StandardForm;}else{currentComponent.value=StudyVue;}
}
</script><template><component :is="currentComponent"></component><button type="button" @click="changeComp">切换组件</button>
</template>

7、组件模板的解析

    直接在DOM中编写模板的时候,注意驼峰格式名称有可能会解析成为连字符格式的名称。特殊位置下的标签,只能解析某种类型的标签,如tr、td、li等,可以将用is属性来解决。

<table><tr is="vue:blog-post-row"></tr>
</table>

 如果是在标准的组件定义文件(单文件)、内联字符串模板(template:``)、<script type="text/x-template"></script>中,则不需要考虑模板解析的问题。

相关文章:

Vue组件基础

Vue组件基础是DOMDOMjs前端组成下的页面布局区域划分&#xff0c;每个组件展示时都要在页面上有一定的大小。每个设定好的页面区域都可以定义Vue的组件&#xff0c;组件中包含了HTML模板、样式、Vue组件对象的定义。Vue的组件是包含页面设计在内的&#xff0c;是一种为页面某个…...

Javascript每天一道算法题(十八)——矩阵置零-中等

文章目录 1、问题2、示例3、解决方法&#xff08;1&#xff09;方法1——标记数组 1、问题 给定一个 y x x 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 2、示例 示例 1&#xff1a; 输入&#xff1a;matrix [[…...

基于ROS开发的开源项目

基于ROS (Robot Operating System) 开发的开源项目很多&#xff0c;其中一些已经在机器人领域内非常知名。以下是一些比较著名的例子&#xff1a; Autoware: Autoware 是一个开源的自动驾驶车辆的软件栈&#xff0c;提供了从3D地图表示、环境感知&#xff08;如障碍物、行人检测…...

kafka精准一次、事务、幂等性

Kafka事务 消息中间件的消息保障的3个级别 At most once 至多一次。数据丢失。At last once 至少一次。数据冗余Exactly one 精准一次。好&#xff01;&#xff01;&#xff01; 如何区分只要盯准提交位移、消费消息这两个动作的时机就可以了。 当&#xff1a;先消费消息、…...

centos 7.9 下利用miniconda里的pyinstaller打包python程序为二进制文件操作方法

centos 7.9 下利用miniconda里的pyinstaller打包python程序为二进制文件操作方法 一.centos 7.9 操作系统安装 参考&#xff1a;https://blog.csdn.net/qq_46015509/article/details/134572030?utm_sourceminiapp_weixin 安装完成后用后台连接工具连上虚拟机 二.安装python3 …...

Motion Plan之基于采样的路径规划算法笔记

Motion Plan之搜索算法笔记 背景&#xff1a; 基于采样算法是一种在路径规划中广泛应用的有效方法。它通过在图中随机选择点来生成一个简化的搜索图&#xff0c;从而加速搜索过程。这种方法的主要优点包括减少内存使用&#xff0c;避免计算错误&#xff0c;具有动态障碍物对抗…...

idea里面常用插件

这里列出了一系列常用的 IntelliJ IDEA 插件&#xff0c;它们可以提高开发效率、简化操作&#xff0c;以及帮助进行代码分析和优化。以下是每个插件的简要介绍&#xff1a; GenerateAllSetter&#xff1a;生成对象的所有 set 方法和 get 方法&#xff0c;方便对象之间的转换。该…...

回归算法优化过程推导

假设存在一个数据集&#xff0c;包含工资、年龄及贷款额度三个维度的数据。我们需要根据这个数据集进行建模&#xff0c;从而在给定工资和年龄的情况下&#xff0c;实现对贷款额度的预测。其中&#xff0c;工资和年龄是模型构建时的两个特征&#xff0c;额度是模型输出的目标值…...

某高品质房产企业:借助NineData平台,统一数据库访问权限,保障业务安全

该企业是中国领先的优质房产品开发及生活综合服务供应商。在 2022 年取得了亮眼的业绩表现&#xff0c;销售额市场占有率跻身全国前五。业务涵盖房产开发、房产代建、城市更新、科技装修等多个领域。 2023 年&#xff0c;该企业和玖章算术&#xff08;浙江&#xff09;科技有限…...

Arduio开发STM32所面临的风险

据说micro_ros用到了arduino,然后用arduino搞stm32需要用到这个Arduino STM32的东西&#xff0c;然后这里申明了&#xff1a;这些代码没有经过严格测试&#xff0c;如果是向心脏起搏器&#xff0c;自动驾驶这样要求严格的的情况下&#xff0c;这个东西不能保证100%不发生问题&a…...

精准人脉引流软件的开发流程与涉及到的技术

一、精准人脉引流软件的开发流程 1. 确定需求&#xff1a;首先&#xff0c;我们需要明确软件的需求&#xff0c;包括目标用户、功能需求、性能需求等。这些需求将直接影响到软件的开发方向和最终效果。 2. 系统设计&#xff1a;根据需求&#xff0c;进行系统设计&#xff0c;…...

Mysql数据库 20.DCL数据控制语言

因这类SQL语言开发人员操作较少&#xff0c;主要是数据库管理员&#xff08;DBA&#xff09;使用&#xff0c;所以前文没有提及&#xff0c;这篇文章进行补充说明 DCL数据控制语言 用来管理数据库用户&#xff0c;控制数据库的访问权限 1.管理用户 1.1 查询用户 select * f…...

使用CMake交叉编译Arm Linux程序

下载安装aarch64-linux-gnu-gcc arm交叉编译工具链 apt-get install aarch64-linux-gnu-gccapt-get install aarch64-linux-gnu-gcc创建编译目录构建makefle 注意&#xff0c;工具链文件的指定一定要紧跟cmake命令之后&#xff0c;不能放到 … 后面构建arm架构cmake mkdir arm…...

训练日志——logging

目录 基础使用日志的6个级别打印日志修改打印级别 高级应用logging的组成记录器Loggers处理器Handlers过滤器Filterformatter格式创建关联打印日志 配置文件参考 基础使用 日志的6个级别 打印日志 import logginglogging.debug(调试日志) logging.info(消息日志) logging.war…...

尺度为什么是sigma?

我们先看中值滤波和均值滤波。 以前&#xff0c;我认为是一样的&#xff0c;没有区分过。 他们说&#xff0c;均值滤波有使图像模糊的效果。 中值滤波有使图像去椒盐的效果。为什么不同呢&#xff1f;试了一下&#xff0c;果然不同&#xff0c;然后追踪了一下定义。 12345&…...

迭代器模式

自定义 Counter 结构体类型&#xff0c;并实现迭代器。其他语言的场景&#xff0c;读取数据库行数据时&#xff0c;使用的就是迭代器。我们使用for语言遍历数组&#xff0c;也是一种迭代。 结构体对象实现 Iterator trait&#xff0c;创建自定义的迭代器&#xff0c;只需要实现…...

C++ 修饰符、存储类、运算符、循环、判断

一、C修饰符类型&#xff1a; C允许在char、int、double数据类型前放置修饰符。 数据类型修饰符&#xff1a; ◆ signed&#xff1a;表示变量可以存储负数。对于整型变量来说&#xff0c;signed 可以省略&#xff0c;因为整型变量默认为有符号类型。 ◆ unsigned&#xff1…...

2023 hnust 湖南科技大学 信息安全管理课程 期中考试 复习资料

前言 ※老师没画重点的补充内容★往年试卷中多次出现或老师提过的&#xff0c;很可能考该笔记是奔着及格线去的&#xff0c;不是奔着90由于没有听过课&#xff0c;部分知识点不一定全&#xff0c;答案不一定完全正确 题型 试卷有很多题是原题 判断题&#xff08;PPT&#xff…...

N皇后问题解的个数

暴力递归 #include <stdio.h>int count0,a[15],flag; void queen(int,int); int main(){int n;scanf("%d",&n);queen(n,n);printf("%d",count); } void queen(int n,int n0){if(n<1){flag1;for(int i1;i<n0;i){for(int j1;j<n0;j){if(…...

php订单发起退款(余额和微信支付)

index.html <a class="btn btn-danger btn-change btn-tuikuan btn-disabled" href="javascript:;"><i class="fa fa-tuikuan"></i> 订单退款</a>-->order.js // 为表格绑定事件Table.api.bindevent(table);//退款…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...