Vue 2组件基础

news2025/7/8 0:17:21

一个简单的组件示例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <button-counter></button-counter>
    </div>
    <script>
        Vue.component('button-counter', {
            template: `<button v-on:click="addCount">你点击了我{{count}}次</button>`,
            data() {
                return {
                    count: 0
                }
            },
            methods: {
                addCount() {
                    this.count++;
                }
            },
        })
        var app = new Vue({
            el: '#app',
        })
    </script>
</body>

</html>
  • 组件是可任意次数复用的Vue实例,所以它与new Vue接收相同选项,但是data必须是一个函数,以确保不同组件不会共享数据。
  • Vue.component用于全局注册一个组件。
  • 每个组件必需有且只有一个根元素。
  • 全局注册组件必须在vue实例化之前,否则组件注册不成功。

使用事件抛出值—>子组件传值给父元素

主要是$emit$event

//在子组件里使用 @eventName="$emit('customeEventName',thrown value)"

//在父组件里,如果下面是使用表达式,则可以通过 $event 获取 thrown value;如果使用函数的话,则该函数的第一个参数为 thrown value
<child-component @customeEventName="JS statement or a function"></child-component>

使用prop向子组件传值—>父组件传值给子组件

注册子组件

Vue.component("child-component",{
    //定义prop
    props:['propName'],
    template:`...`
})

传值给定义的prop

<child-component propName="字符串"></child-component>

如果prop绑定的是动态值(比如data里的数据)那么就使用v-bind绑定

<child-component v-bind:propName="动态值"></child-component>

在组件上使用v-model

最常见的:

<input v-model="inputText">

它等价于:

<input v-bind:value="inputText" v-on:input="inputText=$event.target.value">

如果是自定义组件,如custom-input:

<custom-input v-bind:value="inputText" v-on:input="inputText=$event"></custom-input>

v-bind:value="inputText"实现了inputText改变,value改变

v-on:input="inputText=$event"实现了value改变,inputText改变


简单了解通过插槽分发内容

插槽用于将组件将内容分发到特定位置,换句话说,允许你在父组件中传递内容到子组件,并且子组件可以决定如何显示这些内容。

假如有一个custom-button组件,我们希望可以自定义其名称。

Vue.component('custom-button',{
    template:
    `
    <button>
    <slot></slot>
  	</button>
    `
})

然后我们可以在父组件中这样传递内容:

<custom-button>
  Click me!
</custom-button>

Click me!就会被插入到slot的位置。


初步了解动态组件

动态组件值在一个挂载点可以切换多个组件,类似于tab页的切换。

Vue使用<component>元素加上is attribute来实现动态组件,is可绑定的值包括已注册组件名或一个组件的选项对象。

一个动态组件的例子如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <button @click="type=type==='first'?'second':'first'">{{type}}</button>
        <component :is="type"></component>
    </div>
    <script>
        Vue.component('first', {
            template: 
            `<div>
                <h1>1</h1>
            </div>`,
        })
        Vue.component('second', {
            template:
            `<div>
                <h1>2</h1>
            </div>`,
        })
        var app = new Vue({
            el: '#app',
            data: {
                type: 'first'
            }
        })
    </script>
</body>

</html>

解析DOM模板时的注意事项

ul、ol、table、select这些元素只允许某些特定的元素出现在其内部,

如果像下面这样

<table>
   	<child-component></child-component>
</table>

则会导致渲染出错

比如下面

<div id="app">
    <table>
        <demo></demo>
    </table>
</div>
<script>
    Vue.component('demo', {
        template: 
        `<div>
            <h1>demo</h1>
        </div>`,
    })
    var app = new Vue({
        el: '#app',
        data: {
            type: 'demo'
        }
    })
</script>

虽然显示结果与我们预期的一样,但是F12查看发现,demo组件内容被提到了table元素的上面:

在这里插入图片描述

对于这种情况,我们可以使用前文动态组件中介绍的is属性来解决:

<table>
    <tr :is="type"></tr>
</table>

在这里插入图片描述

需要注意的是如果我们从以下来源使用模板的话,这条限制是不存在的:

  • 字符串 (例如:template: '...')
  • 单文件组件 (.vue)
  • <script type="text/x-template">

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

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

相关文章

IDEA两种方法修改生成的jar包名字

方法一&#xff1a; 直接修改pom文件中的如下部分 <artifactId>excelreport</artifactId> <version>0.0.1-SNAPSHOT</version> <name>excelreport</name> <description>excelreport</description> 修改完成后&#xff0c;点…

慧函数生成代码应用到 IDEA 遇到依赖包问题怎么办?

以“将 map 转换为 json”需求为例&#xff0c;在慧函数界面生成代码。 生成后的代码复制到 IDEA 中&#xff0c;我们可以看到复制进来有导入包报错。 首先解决 com.feisuanyz.flow 引入失败的问题&#xff0c;前往飞算云智官网 从开发者学院【文档中心】的 Java 全自动开发工具…

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面

【引言】 “JS卡片支持为组件设置action&#xff0c;包括router事件和message事件&#xff0c;其中router事件用于应用跳。若设置router事件&#xff0c;则action属性值为"router"&#xff1b;abilityName为卡片提供方应用的跳转目标Ability名&#xff1b;params中的…

Hadoop学习:深入解析MapReduce的大数据魔力(三)

Hadoop学习&#xff1a;深入解析MapReduce的大数据魔力&#xff08;三&#xff09; 3.5 MapReduce 内核源码解析3.5.1 MapTask 工作机制3.5.2 ReduceTask 工作机制3.5.3 ReduceTask 并行度决定机制 3.6 数据清洗&#xff08;ETL&#xff09;1&#xff09;需求2&#xff09;需求…

一起创建Vue脚手架吧

目录 一、安装Vue CLI1.1 配置 npm 淘宝镜像1.2 全局安装1.3 验证是否成功 二、创建vue_test项目2.1 cmd进入桌面2.2 创建项目2.3 运行项目2.4 查看效果 三、脚手架结构分析3.1 文件目录结构分析3.2 vscode终端打开项目 一、安装Vue CLI CLI&#xff1a;command-line interface…

(搜索) 剑指 Offer 13. 机器人的运动范围 ——【Leetcode每日一题】

❓剑指 Offer 13. 机器人的运动范围 难度&#xff1a;中等 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&…

基于 SpringBoot+Vue 的家政服务管理平台(附源码,数据库,教程)

文章目录 1. 背景2.主要技术3. 可行性分析4.系统设计5系统的详细设计与实现5.1前台模块设计5.2后台功能模块 源码下载地址 1. 背景 本系统主要是设计出家政服务管理平台&#xff0c;基于B/S构架&#xff0c;后台数据库采用了Mysql&#xff0c;可以使数据的查询和存储变得更加有…

宏工科技十五周年,“归零心态”竞逐全球

长久以来&#xff0c;物料处理领域一直处于被大型跨国企业垄断&#xff0c;或是国内厂商野蛮生长的状态&#xff0c;宏工科技在15年发展中&#xff0c;通过培育自身的技术创新与自主研发能力&#xff0c;在物料处理领域突围&#xff0c;实现跨行业发展、规模化扩张和持续增长。…

HCIP VLAN实验

VLAN实验 拓扑图配置和分析分析配置LSW1LSW2R1 测试dhcp获取ipICMP测试 拓扑图 配置和分析 分析 从题目来看&#xff0c;因为 pc 1 3都是vlan2而且还是不同网段&#xff0c;pc 2 4 5 6在同一网段&#xff0c;所以可以将pc 1 2 5 4 6分在一个网段 pc4不通5 6 &#xff0c;那就…

【LVS】2、部署LVS-DR群集

LVS-DR数据包的流向分析 1.客户端发送请求到负载均衡器&#xff0c;请求的数据报文到达内核空间&#xff1b; 2.负载均衡服务器和正式服务器在同一个网络中&#xff0c;数据通过二层数据链路层来传输&#xff1b; 3.内核空间判断数据包的目标IP是本机VIP&#xff0c;此时IP虚…

嵌入式Linux开发实操(九):CAN接口开发

前言: CAN网络在汽车中的使用可以说相当广泛。而CAN网络需要的收发器最常用的就是NXP 的TJA1042: CAN网络:

【Docker】docker搭建Ftp服务器,真香

Docker搭建Ftp服务器&#xff0c;真香 1.搜索镜像2.进行下载3.启动docker4.访问5.兼容问题 方便公司正常内网传递大文件&#xff0c;FTP服务就派上用场了&#xff0c;ftp分为主动模式&#xff08;PORT&#xff09;和被动模式(PASV)。主动模式使用20和21端口&#xff0c;其中20为…

CL3闭环步进驱动器CL3-EC808AC

雷赛_交流伺服_步进_闭环步进_混合伺服_电机 安装图&#xff1a; 电流&#xff1a; 0.1A 0x2000-0030; // 单位 0.1A 一般用3A调试【30】 一圈脉冲&#xff1a; 0x2001-00 // 导程5mm 用50000 开环模式&#xff1a;0x2024-00 // 0开环 2闭环…

搞懂大模型的智能基因,RLHF系统设计关键问答

搞懂大模型的智能基因&#xff0c;RLHF系统设计关键问答 搞懂大模型的智能基因&#xff0c;RLHF系统设计关键问答1.RLHF是什么&#xff1f;2.RLHF适用于哪些任务&#xff1f;3 .RLHF和其他构建奖励模型的方法相比有何优劣&#xff1f;4 .什么样的人类反馈才是好的反馈5.RLHF算法…

算法通关村——位运算

1. 常见的位运算 1.1 与 & &&#xff1a;两个数对应的位都是1&#xff0c;那么结果才是1 1 & 1 1 1 & 0 0; 0 & 0 0; 1.2 或 | |: 只要两个数对应的位有一个1&#xff0c;结果就是1 1 | 1 1; 1 | 0 1; 0 | 0 0; 1.3 异或^ ^: 只有两个数的位都…

基于Python的微博大数据舆情分析,舆论情感分析可视化系统,可作为Python毕业设计

运行效果图 基于Python的微博大数据舆情分析&#xff0c;舆论情感分析可视化系统 系统介绍 微博舆情分析系统&#xff0c;项目后端分爬虫模块、数据分析模块、数据存储模块、业务逻辑模块组成。 先后进行了数据获取和筛选存储&#xff0c;对存储后的数据库数据进行提取分析处…

如何用轻叶H5制作一份调查问卷

在营销落地页中&#xff0c;问卷类H5是一种制作简单&#xff0c;易于传播的落地页&#xff0c;通过精巧的设计和严密的逻辑设置&#xff0c;问卷类H5的投放效果也是不容小觑的。 问卷类H5在制作中有以下不可缺少的要素&#xff1a; 清晰的标题和简要的说明 标题应该简明扼要地…

Web3 游戏七月洞察:迈向主流采用的临界点?

作者: lesleyfootprint.network 2023 年 7 月&#xff0c;Web3 游戏领域出现了小幅增长&#xff0c;但对于许多项目来说&#xff0c;用户采用仍然是一个持续的挑战。根据 Footprint Analytics 的数据&#xff0c;活跃的区块链游戏数量略有增加&#xff0c;达到 2,471 个。然而…

第三方支付

1、请求学习中心服务创建选课记录 2、请求订单服务创建商品订单、生成支付二维码。 3、用户扫码请求订单支付服务&#xff0c;订单支付服务请求第三方支付平台生成支付订单。 4、前端唤起支付客户端&#xff0c;用户输入密码完成支付。 5、第三方支付平台支付完成发起支付通…

基于国产安路FPGA的数据采集传输子系统设计

分 布 式 数 据 采 集 系 统 的 结 构 如 图 &#xff12; &#xff0e; &#xff11; 所示 &#xff0c; 主 要 有 传 感 器 网 络 、 数 据 采 集 传 输 子 系 统 、 数 据 汇 聚 平 台 、 数 据 采 集 系 统 控 制 终 端 等 部 分 。 &am…