《跟热饭一起学习vue吧》Part.22 组件带参数 Prop

简介: 《跟热饭一起学习vue吧》Part.22 组件带参数 Prop


Prop


让我们先来看下菜鸟教程的官方定义:


prop 是子组件用来接受父组件传递过来的数据的一个自定义属性。父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 "prop"


然后我们再来思考下,这段话的含义,可以明确以下几点:


  1. prop是一个属性
  2. prop是用来传递数据的,应该相当于一个媒介

那么,这里就引出来几个问题:

  1. props在哪写?

答:在组件里写,当做一个属性,和上节课学的template同级。

  1. props怎么用?

答:值可以是一个列表,里面存放一些变量名。

  1. props里的变量的值从哪来?到哪去?

答:从调用它的dom层里来,到组成实际的template属性里去。


例子如下:

image.png


动态prop


提到动态,其实就是简单的用v-bind去绑定而已。然后本来的变量内容,我们上个例子是写死的一个字符串,现在换成了一个变量。


看下面这个例子,其中换成了一个变量。

image.png

那么就有人问了,换成了变量有啥用呢?为什么要写的这么麻烦?


其实,这样我们就可以实现简单的一个场景,比如上面写个输入框,用v-model指令绑定变量parentMsg,就可以实现 我写什么,这个child组件就显示什么的效果了:


image.png

如上图所示,即是动态prop属性的一种情况的运用了。


在vue的循环中,使用组件


vue的循环,大家一定还有印象,就是在要循环的标签元素内,写一个指令叫v-for

那么我们能不能让组件循环起来呢?当然可以!


image.png


如上图,就是给这个组件循环展示了三次。循环体的sites实际上是个列表,这个列表三个元素,都是字典。但是很可惜,字典的内容并没有起到什么作用。


那么我们接下来就想,能不能子元素字典里的内容起作用,显示到页面上呢?


这就需要把整个数据进行一次打通。那我们就要思考目前的这个具体的数据,已经传到哪了?


很显然,已经到了item这里了。

image.png

每个item 都是一个元素,也就是那个字典之一:

image.png

所以,结合我们之前学的利用props来传递给组件参数,那么就改成了这样:

image.png


这里要额外提一下,props的传输是单向的,反过来是不行的。

Prop验证


看这个新的知识点,验证?估计很多小伙伴看到这个词都不明白,prop验证是什么东西,干嘛用的。别着急,我们慢慢往下看。


我们之前学习使用props作为组件属性的时候,它的值都是一个列表,列表内放上我们要传的变量名。


现在要学习的验证,其实就是验证这些变量,是否符合我们指定的规矩。


比如,我要传入一个参数,叫 message,我们之前可以这么写:

prps:['message']


现在我有个需求,要验证这个message的类型必须是整数,如果类型不对,你打开console控制台就会看到一个vue警告(必须是开发版本vue才有警告)。那么这个要怎么实现呢?写成如下即可:


props: {message: Number}


那么多个变量还有其他各种验证法要怎么写呢?

菜鸟教程给出了很好的统计:


Vue.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: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  }
})


其中的type 可以是下面的任何一个。


image.png

相关文章
|
30天前
|
JavaScript
在 Vue 中处理组件选项与 Mixin 选项冲突的详细解决方案
【10月更文挑战第18天】通过以上的分析和探讨,相信你对在 Vue 中使用 Mixin 时遇到组件选项与 Mixin 选项冲突的解决方法有了更深入的理解。在实际开发中,要根据具体情况灵活选择合适的解决方案,以确保代码的质量和可维护性。
85 7
|
23天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
10天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
12天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
10天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
12天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
28天前
|
缓存 JavaScript UED
Vue 的动态组件与 keep-alive
【10月更文挑战第19天】总的来说,动态组件和 `keep-alive` 是 Vue.js 中非常实用的特性,它们为我们提供了更灵活和高效的组件管理方式,使我们能够更好地构建复杂的应用界面。深入理解和掌握它们,以便在实际开发中能够充分发挥它们的优势,提升我们的开发效率和应用性能。
44 18
|
23天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
28天前
|
前端开发 UED
vue3知识点:Suspense组件
vue3知识点:Suspense组件
31 4
|
27天前
|
JavaScript 前端开发 测试技术
组件化开发:创建可重用的Vue组件
【10月更文挑战第21天】组件化开发:创建可重用的Vue组件
24 1