返回顶部
首页 > 资讯 > 精选 >然后深入了解vue组件中的prop、slot和event
  • 120
分享到

然后深入了解vue组件中的prop、slot和event

2023-06-21 19:06:37 120人浏览 安东尼
摘要

本篇文章为大家展示了然后深入了解Vue组件中的prop、slot和event,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。不管多么复杂的组件,一定是由属性prop、事件event和插槽slot组成的

本篇文章为大家展示了然后深入了解Vue组件中的prop、slot和event,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

不管多么复杂的组件,一定是由属性prop、事件event和插槽slot组成的。

问题引入

是否遇到以下这种场景:开发中,遇到一些特别常见的展示或功能,想抽离并封装成一个独立组件,然后共享给其他开发人员使用。

要想封装一个组件,我们先了解组件的基本组成,不管多么复杂的组件,一定是由属性prop、事件event和插槽slot组成的。编写组件的过程就是设计这三个api的过程。同样如果想阅读别人编写的组件,也可以通过这三个API去快速理解。

那么这三个API:prop、event、slot,我们该怎么写呢?

属性prop

prop是用来定义该组件可接受哪些属性。

阅读vue官网,我们知道prop可以使用数组或对象的写法。很多人为了方便,直接使用prop的数组写法,这是不严谨的,在写通用组件时,我们要尽可能使用prop的对象写法。

大家可以看以下代码:

app.component('my-component', {  props: {    // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)    propA: Number,    // 多个可能的类型    propB: [String, Number],    // 必填的字符串    propC: {      type: String,      required: true    },    // 带有默认值的数字    propD: {      type: Number,      default: 100    },    // 带有默认值的对象    propE: {      type: Object,      // 对象或数组默认值必须从一个工厂函数获取      default() {        return { message: 'hello' }      }    },    // 自定义验证函数    propF: {      validator(value) {        // 这个值必须匹配下列字符串中的一个        return ['success', 'warning', 'danger'].includes(value)      }    },    // 具有默认值的函数    propG: {      type: Function,      // 与对象或数组默认值不同,这不是一个工厂函数 —— 这是一个用作默认值的函数      default() {        return 'Default function'      }    }  }})

相信大家都可以看出来,prop使用对象的写法,我们可以验证传入进来的属性是否正确,可以及时给予提示,这在我们写独立组件时特别有用。

由于vue要遵循单向数据流原则,我们不要尝试去修改prop值,需采用其他方案。

修改prop值常见方案

prop传递初始值,赋值给data

props: ['initialCounter'],data() {  return {    counter: this.initialCounter  }}

通过计算属性来接收prop值

props: ['size'],computed: {  nORMalizedSize() {    return this.size.trim().toLowerCase()  }}

插槽slot

插槽slot是用来分发组件的内容,如

<todo-button>  Add todo</todo-button>
<!-- todo-button 组件模板 --><button class="btn-primary">  <slot></slot></button>

当渲染时,会被替换成Add todo,如

<!-- 渲染 html --><button class="btn-primary">  Add todo</button>

这是slot的最基础用法,衍生而来的有具名插槽,顾名思义就是给区分插槽,可以设置多个插槽,如

<div class="container">  <header>    <slot name="header"></slot>  </header>  <main>    <slot></slot>  </main>  <footer>    <slot name="footer"></slot>  </footer></div>

有时会遇到给插槽设置备用信息,那么可以这样使用:

<button type="submit">  <slot>Submit</slot></button>

插槽的备用信息就是Submit

事件event

事件名

当子组件的数据有修改,想通知父组件时,可以使用事件event,如下:

// 子组件this.$emit('myEvent')
// 父组件<my-component @my-event="doSomething"></my-component>

可以看出,子组件调用时,事件名是驼峰,而父组件的事件名则是kebab-case命名。

自定义事件

可以通过emits选项来自定义事件,如

app.component('custom-form', {  emits: ['inFocus', 'submit']})

需要注意的是,如果自定义事件和原生事件相同,比如click,那么自定义事件会代替原生事件

组件的组织

引入官网的一张图来

然后深入了解vue组件中的prop、slot和event

一个页面相当于一个由组件组成的树,每个组件都可能有父组件和子组件,通过属性prop可让父组件传递属性到子组件,通过事件event可让子组件传递信息到父组件,而插槽slot则是父组件用来分发内容

除了这三个API,组件还有其他内容,比如生命周期,混入,计算属性等等,但是针对组件开发来说,这三个API已足够了。掌握了这三个API,剩下的就是解耦组件的交互逻辑,尽量分发不同的功能到不同的子组件里,然后建立组件树。

上述内容就是然后深入了解vue组件中的prop、slot和event,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 然后深入了解vue组件中的prop、slot和event

本文链接: https://lsjlt.com/news/300364.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 然后深入了解vue组件中的prop、slot和event
    本篇文章为大家展示了然后深入了解vue组件中的prop、slot和event,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。不管多么复杂的组件,一定是由属性prop、事件event和插槽slot组成的...
    99+
    2023-06-21
  • 深入了解Vue中的动态组件
    1、什么是动态组件动态组件指的是动态切换组件的显示与隐藏。(学习视频分享:vue视频教程)2、如何实现动态组件渲染vue 提供了一个内置的 <component> 组件,专门用来实现动态组件的渲染。示例代码如下:3、使用 kee...
    99+
    2022-11-22
    Vue
  • 深入理解vue中的 slot-scope=“scope“
    目录理解vue的 slot-scope=“scope“vue中的slot和slot-scope使用插槽的作用具名插槽 作用域插槽总结理解vue的 s...
    99+
    2022-12-09
    vue slot-scope=scope slot-scope=scope
  • 怎么深入了解Vue组件的创建和使用
    今天就跟大家聊聊有关怎么深入了解Vue组件的创建和使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、什么是组件?组件 (Component) 是 Vue.js 最强大的功能之一。...
    99+
    2023-06-22
  • Vue中props组件和slot标签的区别
    在 Vue 中,props 和 slot 都是组件之间进行通信的机制,它们的作用和应用场景有一些区别: props 是一种组件的数据传递机制,...
    99+
    2023-05-14
    Vue中props组件和slot标签的区别 Vue中props组件 Vue中slot标签
  • Vue中slot-scope的深入理解(适合初学者)
    百度上已经有很多的关于slot-scope的文章,但我感觉都是那些以前没学好,又回头学的人,他们都使用了.Vue文件,我觉得有点不适合初学者,所以我就写一篇适合初学者的。 先抛例程:...
    99+
    2024-04-02
  • 深入了解Vue组件七种通信方式
    目录1.props/$emit简介代码实例2.v-slot简介代码实例3.$refs/ $parent/$children/$root简介代码实例4.$attrs/$listener...
    99+
    2024-04-02
  • Vue中props组件和slot标签的区别是什么
    本文小编为大家详细介绍“Vue中props组件和slot标签的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中props组件和slot标签的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • 怎样深入了解Vue组件七种通信方式
    怎样深入了解Vue组件七种通信方式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。vue组件通信的方式,这是在面试中一个非常高频的问题,我刚开始找实习便经常遇到这个问题,当时只知...
    99+
    2023-06-22
  • 深入了解前端和后端的区别
    前端和后端是软件开发中两个非常重要的概念,它们分别负责不同的功能和任务。在互联网时代,前端和后端的区分已经变得十分明显,而深入了解它们之间的区别对于想要从事软件开发的人来说是非常重要的...
    99+
    2024-04-02
  • 怎么深入了解vue中的v-model
    这篇文章给大家介绍怎么深入了解vue中的v-model,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先,要明白我们学习v-model的作用是什么一个组件上的 v-model 默认会利用名为 value 的 prop ...
    99+
    2023-06-26
  • 深入了解Vue中的自定义指令
    作为使用Vue的开发者,我们对Vue指令一定不陌生,诸如v-model、v-on、v-for、v-if等,同时Vue也为开发者提供了自定义指令的api,熟练的使用自定义指令可以极大的提高了我们编写代码的效率,让我们可以节省时间开心的摸鱼~对...
    99+
    2022-11-22
    Vue.js
  • 深入解析Android中的RecyclerView组件
    前些日子,组里为了在目前的Android程序里实现基于ListView子项的动画效果,希望将最新的RecyclerView引入到程序中,于是我便花了一些时间研究了一下Recyc...
    99+
    2022-06-06
    recyclerview Android
  • 深入了解PHP数组的分类和特点
    PHP是一种广泛应用于Web开发中的编程语言,其强大的数组功能被开发者广泛使用。在PHP中,数组是一种非常灵活和强大的数据类型,可以存储多个值并根据需要随时进行增加、删除、修改等操作。...
    99+
    2024-03-14
    php 数组 特点
  • 深入了解PHP数组的分类和特点
    PHP是一种广泛应用于Web开发中的编程语言,其强大的数组功能被开发者广泛使用。在PHP中,数组是一种非常灵活和强大的数据类型,可以存储多个值并根据需要随时进行增加、删除、修改等操作。...
    99+
    2024-03-14
    php 数组 特点
  • Vue中父子组件通信与事件触发的深入讲解
    目录一、组件子组件父组件二、父子组件通信父组件给子组件通信子组件向父组件通信三、父子组件事件触发父组件调用子组件中的事件方法子组件调用父组件中的事件方法四、总结一、组件 子组件 &l...
    99+
    2024-04-02
  • VUE 异步组件的异步世界:深入理解
    异步组件的加载 异步组件是通过 import() 语法加载的,它返回一个 Promise。在解析成功后,组件被动态地添加到 Vue 实例中。这种方式可防止阻塞初始渲染,并使应用程序更加响应。 使用异步组件的好处 代码分割: 异步组件允许...
    99+
    2024-04-02
  • 深入了解Spring中的@Autowired和@Resource注解
    目录@Autowired@Resource总结应用场景@Resource和@Autowired是Spring Framework中两种常用的注入方式,它们的作用是在Spring容器中...
    99+
    2023-05-17
    Spring @Autowired和@Resource Spring @Autowired Spring @Resource
  • jQuery中filter()和find()的区别深入了解
    一直不是很清楚filter()方法和find()方法的区别,今天在看jQuery Cookbook一书中,终于算是搞清楚了。 filter()过滤DOM元素包装集,是指操作当前元素集...
    99+
    2022-11-15
    jQuery filter() find()
  • VUE 异步组件的深入探究:拆解内部结构
    生命周期钩子 异步组件具有以下专有生命周期钩子: beforeResolve:在组件解析完成之前调用。 resolved:在组件解析完成之后调用。 beforeCreate:与标准组件生命周期钩子相同,在组件创建之前调用。 侦听器 异...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作