Vue---组件

Vue—组件

目录

  • Vue---组件
    • 定义组件
      • 全局组件
      • 局部组件
    • 组件通讯`***重点***`
      • 父子通信之父传子(props)
      • 父子通信之子传父($emit)
      • ref属性($refs)
    • 动态组件
    • 插槽
    • 命名插槽

定义组件

全局组件

  • vue2中template只能传递单标签,若要定义多个标签需要用div或其他包裹,vue3随意
<div id="app"><Child1></Child1>
</div>
Vue.component('Child1', {template: `<p>我是{{ name }}</p>`,data() {return {name: '组件1'}},
})

局部组件

局部组件在注册后只能在当前实例或者是组件中使用

  • 标签的命名只有首字母能大写,其余地方大写会直接报错
<div id="app2"><mydiv></mydiv>
</div>
// 写法1
const vm2 = new Vue({el: '#app2',components: {'mydiv': {template: `<p>我是{{ name }}</p>`,data() {return {name: '组件2'}}}}
})
// 写法2
let mydiv = {template: `<p>我是{{ name }}</p>`,data() {return {name: '组件2'}}
}
const vm2 = new Vue({el: '#app2',components: {mydiv}
})

组件通讯***重点***

在局部注册组件中我们是将组件注册到了vue根组件中,这里的根组件(**const vm2 = new Vue({})**这部分)也就是父组件,那么他和局部组件(子)传递数据的过程就叫组件通讯

<div id="app2"> // 父<mydiv></mydiv>	// 子
</div>

父子通信之父传子(props)

  • 关键字props:通过 props,父组件可以向子组件传递数据,子组件可以接收父组件传递的数据并在内部使用
  • 案例中<qwe :name="info.name" :age="info.age"></qwe>的name和age其实就相当于是由props赋予的属性,因为在原根组件中是没有这两个属性的,他们是由props传递过来的
<div id="app"><qwe :name="info.name" :age="info.age"></qwe>
</div>
let qwe = {template: `<div><p>你好</p><p>{{ name }}</p><p>{{ age }}</p></div>`,props:['name','age']
}
const vm = new Vue({el: '#app',data: {info: {'name': '张三', 'age': 18}},components: {qwe}
})
  • props应传递字符串形式属性名,并且与data不要存在同名属性

image-20240428162406361

父子通信之子传父($emit)

  • 关键字$emit:通过 $emit,子组件可以向父组件发送自定义事件,父组件可以监听这些事件并做出相应的处理
<div id="app">// getchild为自定义事件,用于子传父<child1 @getchild="handleGetChild"></child1>我儿子叫{{childname}}
</div>
var child1 = {template:`<button @click="handleSend">点我获得儿子</button>`,data() {return {'name': '张三'}},methods: {handleSend() {// 传递this.name给父组件,也就是'张三'this.$emit('getchild', this.name)}}
}
const vm = new Vue({el: '#app',data: {childname: ''},components: {child1},methods: {handleGetChild(info) {// info是子组件传递来的数据this.childname = info}}
})

image-20240428170445350

ref属性($refs)

  • $refs关键字:可以从子组件、父组件、任意其他组件中获取数据、调用函数

沿用上述示例:

<div id="app">// 新增绑定事件childRef<child1 @getchild="handleGetChild" ref="childRef"></child1>我儿子叫{{childname}}
</div>
var child1 = {template:`<button @click="handleSend">点我获得儿子</button>`,data() {return {'name': '张三'}},methods: {handleSend() {this.$emit('getchild', this.name)},sayHello(){console.log('你好')}}
}
const vm = new Vue({el: '#app',data: {childname: ''},components: {child1},methods: {handleGetChild(info) {// 打印子组件中的数据console.log(this.$refs.childRef.name)// 触发子组件中的函数satHello()this.$refs.childRef.sayHello()this.childname = info}}
})
  • 此时点击按钮后会在控制台打印’张三 你好’

动态组件

  • is关键字:可以接受一个组件名或对象,并根据该值渲染对应组件
<div id="app"><button @click="handleSwitch(1)">点我打开组件1</button><button @click="handleSwitch(2)">点我打开组件2</button><button @click="handleSwitch(3)">点我打开组件3</button><components :is="current"></components>
</div>
var mydiv1 = {template:`<div>我是组件1</div>`
}
var mydiv2 = {template:`<div>我是组件2</div>`
}
var mydiv3 = {template:`<div>我是组件3</div>`
}
var vm = new Vue({el: '#app',data: {current: '',switchList: [mydiv1, mydiv2, mydiv3]},components: {mydiv1,mydiv2,mydiv3,},methods: {handleSwitch(s) {this.current = this.switchList[s - 1]}}
})

插槽

一般情况下,组件内的内容都是写死的,只能通过通信或修改组件本身,这导致其扩展性非常差,因此出现了插槽这一概念,只需在组件中添加<slot></slot>,就可以在body的组件标签中添加内容

<div id="app"><p>-----父组件开始-----</p><mydiv></mydiv><mydiv><button>来自插槽的按钮</button></mydiv><mydiv>我是父组件,来占插槽的</mydiv><p>-----父组件结束-----</p>
</div>
var mydiv = {template:`<div><p>----插槽开始----</p><slot></slot><p>----插槽结束----</p></div>`
}
var vm = new Vue({el:'#app',components:{mydiv}
})
  • 每个插槽都会接受父组件插入的所有数据
  • 当插槽未被使用时他会沿用上一个父组件
<div id="app"><p>-----父组件开始-----</p><mydiv><button>来自插槽的按钮</button></mydiv><p>-----父组件结束-----</p>
</div>
template:
`
<div>
<p>----插槽开始----</p>
<slot></slot>
<slot></slot>
<p>----插槽结束----</p>
</div>
`

image-20240428200902587

命名插槽

  • 命名插槽的好处,不会因为未使用插槽而自动填充
<div id="app"><p>-----父组件开始-----</p><mydiv v-slot:a><button>来自插槽的按钮</button></mydiv><p>-----父组件结束-----</p>
</div>
    var mydiv = {template:`<div><p>----插槽开始----</p><slot name="a"></slot><slot name="b"></slot><p>----插槽结束----</p></div>`}var vm = new Vue({el:'#app',components:{mydiv}})

image-20240428201022376

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

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

相关文章

浏览器渲染机制:重排(Reflow)与重绘(Repaint)以及Vue优化策略

浏览器渲染机制是一个复杂但有序的过程&#xff0c;其目的是将HTML、CSS和JavaScript代码转化为用户可以看到和交互的视觉界面。重排&#xff08;Reflow&#xff09;与重绘&#xff08;Repaint&#xff09;是浏览器渲染过程中对页面元素进行更新的两个重要步骤&#xff0c;理解…

ubuntu22.04安装TensorRT(过程记录)

重要说明&#xff1a;此贴经过多次修改。第一次安装的的为trt8.6.1版本。第二次安装的10.0.0.6版本。有些地方可能没改过来&#xff0c;比如链接向导&#xff0c;我懒得改了&#xff0c;但是流程是对的。 cuda和cudnn版本对应关系 tensorRT历史发行版本 CUDA历史发行版本 cudn…

ENVI不同版本个人使用对比

ENVI不同版本个人使用对比 文章目录 ENVI不同版本个人使用对比前言对比5.3学习版5.6学习版6.0试用版 总结 前言 目前来看&#xff0c;流传较广的可供大家免费获取的ENVI版本主要是5.3学习版 5.6学习版 6.0学习版这三个版本&#xff0c;不同的版本有不同特色&#xff0c;在此做…

C#基础|StringBuilder字符串如何高效处理。

哈喽&#xff0c;你好&#xff0c;我是雷工。 字符串处理在C#程序开发中是使用频率比较高的&#xff0c;但常规的字符串处理方式对内存占用比较多&#xff0c;为了优化内存&#xff0c;减少不必要的内存浪费&#xff0c;引入了StringBuilder类。 下面学习下StringBuilder类的使…

PC-3000 Flash:NAND 闪存设备(包括一体式U盘)数据恢复的重量级工具(一)

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含 PC-3000 系列数…

LeetCode 热题 100 Day05

矩阵相关题型 Leetcode 73. 矩阵置零【中等】 题意理解&#xff1a; 将矩阵中0所在位置&#xff0c;行|列置换为全0 其中可以通过记录0元素所在的行、列号&#xff0c;来标记要置换的行|列 将对应位置置换为0 解题思路&#xff1a; 第一个思路&#xff1a; 可以…

React | classnames

classnames 这个库在我们的项目中有大量的使用到&#xff0c;它不仅很实用&#xff0c;还非常好用&#xff0c;但还有人不知道这个库&#xff0c;我真的是十分心痛。 通过 classnames&#xff0c;我们可以给组件设置多个 className&#xff0c;还可以根据需要动态设置 classNa…

模块四:前缀和——DP35 【模板】二维前缀和

文章目录 题目描述算法原理解法一&#xff1a;暴力模拟&#xff08;时间复杂度为O(n*m*q)&#xff09;解法二&#xff1a;二维前缀和&#xff08;时间复杂度为O(m*n)O(q)) 代码实现解法二&#xff1a;前缀和&#xff08;C)Java 题目描述 题目链接&#xff1a;DP35 【模板】二维…

三星电脑文件夹误删了怎么办?恢复方案在此

在使用三星电脑的过程中&#xff0c;我们可能会不小心删除了某个重要的文件夹&#xff0c;其中可能包含了工作文件、家庭照片、视频或其他珍贵的数据。面对这种突发情况&#xff0c;不必过于焦虑。本文将为您提供几种有效的恢复方案&#xff0c;希望能帮助您找回误删的文件夹及…

openEuler-22.03安装 mysql8.0.32

一、下载解压 下载地址&#xff1a; MySQL :: Download MySQL Community Server (Archived Versions) tar -xvf mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql-8.0.32 二、安装 最开始安装一直报错 缺少 libcrypto.so.10库文件,安装openssl可以解决 wget http://…

Java客户端如何直接调用es的API

Java客户端如何直接调用es的API 一. 问题二. withJson 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一. 问题 今天做项目的时候&#xff0c;想要直接通过java客户端调用es的api…

揭秘工业大模型:从人工智能小白到技术先锋

工业大模型的五个基本问题 信息化时代&#xff0c;数字化转型成为企业提升营运效率、应对经营风险和提升核心竞争力的重要途径。在此过程中&#xff0c;数据作为一种客观存在的资源&#xff0c;所产生的价值日益凸显。党的十九届四中全会从国家治理体系和治理能力现代化的高度将…

【万字长文】看完这篇yolov4详解,那算是真会了

前言 目标检测作为计算机视觉领域的一个核心任务&#xff0c;其目的是识别出图像中所有感兴趣的目标&#xff0c;并给出它们的类别和位置。YOLO&#xff08;You Only Look Once&#xff09;系列模型因其检测速度快、性能优异而成为该领域的明星。随着YOLOv4的推出&#xff0c;…

双塔模型在召回和粗排的区别

答案参考&#xff1a;推荐系统中&#xff0c;双塔模型用于粗排和用于召回的区别有哪些? - 知乎 召回和粗排在不同阶段面临样本不一样&#xff0c;对双塔来说样本分布差异会使召回和粗排采取不一样的方式。召回打分空间是全部item空间&#xff0c;曝光只有很少一部分&#xff0…

【机器学习】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林&#xff08;RF&#xff09; 一、引言1. 简要介绍集成学习的概念及其在机器学习领域的重要性。2. 引出随机森林作为Bagging算法的一个典型应用。 二、随机森林原理1. Bagging算法的基本思想2. 随机森林的构造3. 随机森林的工作机制 三…

ClickHouse 如何实现数据一致性

文章目录 ReplacingMegreTree 引擎数据一致性实现方式1.ReplacingMegreTree 引擎2.ReplacingMegreTree 引擎 手动合并3.ReplacingMegreTree 引擎 FINAL 查询4.ReplacingMegreTree 引擎 标记 GroupBy5.允许偏差 前言&#xff1a;在大数据中&#xff0c;基本上所有组件都要求…

Docker创建镜像之--------------基于Dockerfile创建

目录 一、在编写 Dockerfile 时&#xff0c;有严格的格式需要遵循 二、Dockerfile 操作常用的指令 2.1ENTRYPOINT和CMD共存的情形 2.2ENTRYPOINT和CMD的区别 2.3ADD 与COPY的区别 三、Dockerfile案例 3.1构建apache镜像 3.1.1 创建镜像目录方便管理 3.1.2创建编写dock…

函数递归与迭代

目录 1.递归 1.1递归的思想 1.2递归的限制条件 2.递归与迭代 1.递归 函数递归是什么&#xff1f; 递归是学习C语⾔函数绕不开的⼀个话题&#xff0c;那什么是递归呢? 递归其实是⼀种解决问题的⽅法&#xff0c;在C语⾔中&#xff0c;递归就是函数⾃⼰调⽤⾃⼰。 写⼀个史…

大模型对数字营销的驱动赋能

一、大模型驱动的营销数智化个信未来发展趋势 1.模型算法能力全面升级 大模型凭借智能化的用户洞察&#xff0c;个性化的需求预测、系统化的数据分析、效率化的营销决策以及实实化的全域检测支持&#xff0c;为营销行业更加准确地把握市场动态和消费者需求提供了强大支持。可以…

Spring Boot 如何实现缓存预热

Spring Boot 实现缓存预热 1、使用启动监听事件实现缓存预热。2、使用 PostConstruct 注解实现缓存预热。3、使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。4、通过实现 InitializingBean 接口&#xff0c;并重写 afterPropertiesSet 方法实现缓存预热。 1、使用…