Vue3组件化开发(1)

1. 认识组件的嵌套

前面我们是将所有的逻辑放到一个App.vue中:

在之前的案例中,我们只是 创建了一个组件App如果我们一个应用程序 将所有的逻辑都放在一个组件 中,那么这个组件就会变成 常的臃肿和难以维护
所以组件化的核心思想应该是 对组件进行拆分 ,拆分成 一个个小的组件 将这些组件组合嵌套在一起 ,最终形成 我们的应用程序
我们来分析一下下面代码的嵌套逻辑,假如我们将所有的代码逻辑都放到一个App.vue 组件中:
  • 我们会发现,将所有的代码逻辑全部放到一个组件中,代码是非常的臃肿和难以维护的。
  • 并且在真实开发中,我们会有更多的内容和代码逻辑,对于扩展性和可维护性来说都是非常差的。
  • 所以,在真实的开发中,我们会对组件进行拆分,拆分成一个个功能的小组件。

 

2.组件的拆分

按照如上的拆分方式后,我们开发对应的逻辑只需要去对应的组件编写就可。

 3. 组件的通信

上面的嵌套逻辑如下,它们存在如下关系:

 

  • App组件是Header、Main、Footer组件的父组件
  • Main组件是Banner、ProductList组件的父组件

在开发过程中,我们会经常遇到需要组件之间相互进行通信

  • 比如App可能使用了多个Header,每个地方的Header展示的内容不同,那么我们就需要使用者传递给Header一些数据,让其进行展示;
  • 又比如我们在Main中一次性请求了Banner数据和ProductList数据,那么就需要传递给它们来进行展示;
  • 也可能是子组件中发生了事件,需要由父组件来完成某些操作,那就需要子组件向父组件传递事件
总之,在一个Vue项目中,组件之间的通信是非常重要的环节,所以接下来我们就具体学习一下组件之间是如何相 互之间传递数据的。
4.父子组件之间的通信
父子组件之间如何进行通信呢?
  • 父组件传递给子组件:通过props属性
  • 子组件传递给父组件:通过$emit触发事件

4.1父组件传递给子组件

在开发中很常见的就是父子组件之间通信,比如父组件有一些数据,需要子组件来进行展示,这个时候我们可以通过props来完成组件之间的通信

什么是Props呢?

Props是你可以在组件上 注册一些自定义的attribute父组件给 这些attribute赋值 子组件通过attribute的名称获取到对应的值
Props有两种常见的用法:
  • 方式一:字符串数组,数组中的字符串就是attribute的名称;
  • 方式二:对象类型,对象类型我们可以在指定attribute名称的同时,指定它需要传递的类型、是否是必须的、默认值等等;

4.1.1Props的数组用法

4.1.2Props的对象用法

数组用法中我们只能说明传入的attribute的名称,并不能对其进行任何形式的限制,接下来我们来看一下对象的写法是如何让我们的props变得更加完善的。

当使用对象语法的时候,我们可以对传入的内容限制更多:

  • 比如指定传入的attribute的类型
  • 比如指定传入的attribute是否是必传的
  • 比如指定没有传入时,attribute的默认值

 4.1.3细节

(1)细节一:那么type的类型都可以是哪些呢?

  • String
  • Number
  • Boolean
  • Array
  • Object
  • Date
  • Function
  • Symbol

(2)细节二:对象类型的其他写法

 (3)细节三:Prop 的大小写命名

Prop 的大小写命名(camelCase vs kebab-case)

HTML 中的 attribute 名是大小写不敏感 的,所以 浏览器会把所有大写字符解释为小写字符
这意味着当你 使用 DOM 中的模板 时, camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名
4.1.3 非Prop的Attribute
什么是非Prop的Attribute呢?
  • 当我们传递给一个组件某个属性,但是该属性并没有定义对应的props或者emits时,就称之为 非Prop的 Attribute
  • 常见的包括class、style、id属性等;
Attribute继承
  • 组件有单个根节点时,非Prop的Attribute将自动添加到根节点的Attribute中:

 4.1.4禁用Attribute继承和多根节点

如果我们不希望组件的根元素继承attribute,可以在组件中设置 inheritAttrs: false

 

  • 禁用attribute继承的常见情况需要将attribute应用于根元素之外的其他元素
  • 我们可以通过 $attrs来访问所有的 非props的attribute

多个根节点的attribute

多个根节点的attribute如果没有显示的绑定,那么会报警告,我们必须手动的指定要绑定到哪一个属性上:

4.2子组件传递给父组件

什么情况下子组件需要传递内容到父组件呢?

  • 子组件有一些事件发生的时候,比如在组件中发生了点击,父组件需要切换内容;
  • 子组件有一些内容想要传递给父组件的时候;
我们如何完成上面的操作呢?
  • 首先,我们需要在子组件中定义好在某些情况下触发的事件名称
  • 其次,在父组件中以v-on的方式传入要监听的事件名称,并且绑定到对应的方法中;
  • 最后,在子组件中发生某个事件的时候,根据事件名称触发对应的事件

5.自定义组件的流程

我们封装一个CounterOperation.vue的组件:

内部其实是监听两个按钮的点击,点击之后通过 this.$emit的方式发出去事件;

 6.自定义事件的参数和验证

自定义事件的时候,我们也可以传递一些参数给父组件:

在vue3当中,我们可以对传递的参数进行验证:

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue组件开发是一种将页面拆分成独立、可复用的组件开发方式。下面是Vue组件开发的一般过程: 1. 创建组件:首先,你需要创建一个Vue组件。一个Vue组件通常由模板、脚本和样式组成。模板定义了组件的结构和布局,脚本定义了组件的行为和数据,样式定义了组件的外观。 2. 注册组件:在使用组件之前,你需要将其注册到Vue实例中。可以通过全局注册或局部注册的方式来注册组件。全局注册可以在任何地方使用该组件,而局部注册只能在特定的Vue实例中使用。 3. 使用组件:注册完成后,你可以在模板中使用该组件。通过在模板中使用组件的标签,就可以将该组件渲染到页面上。 4. 传递数据:在使用组件时,你可以通过props属性向组件传递数据。props属性允许父组件向子组件传递数据,并且子组件可以在脚本中使用这些数据。 5. 监听事件:除了传递数据,你还可以在子组件中触发事件,并在父组件中监听这些事件。通过自定义事件,可以实现子组件与父组件之间的通信。 6. 组件间通信:有时候,你可能需要在不相关的组件之间进行通信。Vue提供了多种方式来实现组件间的通信,如使用事件总线、Vuex状态管理等。 7. 组件复用:组件开发的一个重要优势是组件的复用性。你可以在不同的项目中重复使用已经创建好的组件,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桑桑和阿战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值