2021-10-22 vue组件知识

本文深入探讨Vue组件的全局与局部注册,介绍如何使用Vue DevTools进行组件调试,详细讲解组件间数据交互的三种方式,包括父组件向子组件、子组件向父组件及兄弟组件间的数据传递。此外,还详细阐述了组件插槽的使用,包括具名插槽和作用域插槽,帮助开发者更好地理解Vue组件的灵活性。
摘要由CSDN通过智能技术生成

如何基于vue进行组件化开发?
最基本的操作就是组件的处理,组件首先要注册(定义),然后才能使用
组件复用:每个组件是一个独立的实例,他们之间的数据是相互独立的

全局组件注册

vue实例本身就是一个组件,所有vue模板的内容都要放到el指定的容器中(根容器)
父子组件:现在注册的是子组件,他要放到最外层容器里,最外层容器也是组件,他们之间就形成了父子关系。
在这里插入图片描述

data的值是个函数:本质上来说,使用函数会形成一个闭包环境,这样保证每个组件都有一个独立的作用域
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全局组件不仅可以用于其他组件还可以用于根组件

在这里插入图片描述

局部组件注册

在这里插入图片描述

组件名称(推荐用短横线的方式):组件内容
组件内容抽取到一个对象中

局部组件只能被他的

vue调试工具

组件最终会被渲染成原生的dom
1.展示组件之间的层次关系
2.调试组件中的数据

组件间数据交互

组件之间的关系:父子组件、兄弟组件

组件之间的数据交互
1.父组件向子组件传递数据
2.子组件向父组件传递数据
3.兄弟组件之间传递数据

vue实例本身是一个组件,并且是个根组件,在此基础之上重新定义一个子组件
定义子组件
组件名称(短横线),组件内容
组件内容是个对象,里面包括组件的相关属性。
data属性是个函数,返回值是个对象,里面是子组件的数据
template属性是个字符串,把子组件的内容呈现出来
使用子组件
在根组件中直接使用组件名称,用标签包起来

1.父组件向子组件传递数据

子组件可以使用父组件传递过来的数据

子组件怎么接收:子组件注册时,组件内容添加一个props属性,用来接收父组件传递过来的数据。值是个数组,数组里面可以有多个父组件的属性。

父组件怎么把数据传递过来:以属性的方式传递过来,父组件使用子组件时,给子组件绑定一个属性,属性名要和props中传递过来的属性名一样,属性值可以直接写也可以或者在父组件的data中动态绑定
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过v-bind(即:)绑定就会在子组件中获取到对应类型的数据,否则就是字符串

2.子组件向父组件传递数据

不能通过props直接操作父组件的数据,因为他是单向数据流

情况一:

给子组件添加一个按钮,显式调用一个特定的方法$emit,当点击的时候会触发$emit,方法名固定,这个方法会携带一个参数,参数名称就是自定义事件,名字是自己定义的,这个事件会传递给父组件。

父组件需要监听这个事件v-on:事件名(即@事件名),事件名要和$emit()括弧里的一样,写在父组件模板区域的都属于父组件

在这里插入图片描述

情况二:

需要传值,子组件用$emit方法传递,父组件用$event接收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.兄弟组件之间传递数据

兄弟组件之间不可以直接交互,必须通过事件中心进行通信

在这里插入图片描述

首先定义两个子组件,组件名称,组件内容(包括data,template,methods) 下面要做的就是对事件中心事件的监听和事件的触发

1.定义一个全局的hub,在hub中可以进行事件监听
在这里插入图片描述
2.组件内部何时监听事件
mounted(){}钩子函数,一旦被触发,模板template已经就绪了,可以对模板进行相关的操作了,在这里监听事件
起一个事件名称,事件触发之后做什么使用箭头函数,这个函数会接收对方传过来的数据

3.什么时候触发事件
点击对应按钮的时候,触发监听的兄弟组件事件,触发的事件名称、传递过来的值
在这里插入图片描述
实现每次点击jerry后tom+1

组件插槽

插槽的意思就是在子组件模板中提供一个位置
插槽的内容在当父组件使用子组件时子组件标签的中间传递,使得子组件模板展示的信息通过插槽的方式动态改变

插槽:父组件向子组件传递内容(修改子组件的模板内容)。 <slot></slot>属于vue的api,名字固定

在这里插入图片描述

子组件标签中有内容,内容会通过插槽的方式传递给子组件模板区域,子组件的模板中会预留一个位置,这个位置就是插槽,子组件标签中的内容会放到插槽中最终呈现出来
在这里插入图片描述
如果slot标签中间有内容,当父组件使用子组件时:

  • 子组件标签中间没有内容,那slot标签中间的内容会默认显示出来;
  • 子组件标签中间内容,那slot标签中间的内容会被子组件标签中间的内容覆盖;

在这里插入图片描述
在这里插入图片描述

具名插槽

有名字的插槽 :在定义子组件时,他的模板中可以有多个插槽<slot></ slot>,有的通过name属性,指定插槽的名字,也有一个默认的不带名字的插槽

插槽如何填充
根据父组件中插槽的名字匹配到子组件模板中的对应位置,没有名字的匹配到子组件中的匿名插槽处,让子组件把内容渲染出来;想要往插槽中填充多个标签,可以在父组件中使用template标签包裹
在这里插入图片描述
在这里插入图片描述

作用域插槽

应用场景:父组件可以获取子组件中的数据,并对子组件的数据进行一些加工处理的操作

子组件的模板一般写好就不动了,由父组件直接对子组件进行操作

子组件模板区域:把子组件要展示的内容通过slot包裹起来,给slot绑定一个自定义属性,属性名自己写,值就是要操作的数据

父组件怎么往子组件模板区域填充内容?父组件中用template标签,slot-scope属性能得到绑定的那个属性,属性名自己定义一般叫slotProps点出自己定义的属性名
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值