Vue组件选项props的使用介绍

这篇文章主要介绍了关于vue组件选项props的使用介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。本文将详细介绍Vue组件选项props,需要的朋友可以参考下

前面的话

  组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项。在 Vue 中,父子组件的关系可以总结为 props down, events up。父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。本文将详细介绍Vue组件选项props

Vue组件选项props的使用介绍

静态props

立即学习“前端免费学习笔记(深入)”;

  组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,需要通过子组件的 props 选项

  使用Prop传递数据包括静态和动态两种形式,下面先介绍静态props

  子组件要显式地用 props 选项声明它期待获得的数据

var childNode = { template: '

{{message}}

', props:['message']}

登录后复制

  静态Prop通过为子组件在父组件中的占位符添加特性的方式来达到传值的目的

 

var childNode = { template: '

{{message}}', props:['message']}var parentNode = { template: `

`, components: { 'child': childNode }};// 创建根实例new Vue({ el: '#example', components: { 'parent': parentNode }})

登录后复制

Vue组件选项props的使用介绍

命名约定

  对于props声明的属性来说,在父级HTML模板中,属性名需要使用中划线写法

var parentNode = { template: ` 

   

`, components: { 'child': childNode }};

登录后复制

  子级props属性声明时,使用小驼峰或者中划线写法都可以;而子级模板使用从父级传来的变量时,需要使用对应的小驼峰写法

var childNode = { template: '

{{myMessage}}

', props:['myMessage']}var childNode = { template: '

{{myMessage}}

', props:['my-message']}

登录后复制

动态props

  在模板中,要动态地绑定父组件的数据到子模板的 props,与绑定到任何普通的HTML特性相类似,就是用 v-bind。每当父组件的数据变化时,该变化也会传导给子组件

var childNode = { template: '

{{myMessage}}

', props:['myMessage']}var parentNode = { template: ` 

   

`, components: { 'child': childNode }, data(){ return { 'data1':'aaa', 'data2':'bbb' } }};

登录后复制

传递数字

  初学者常犯的一个错误是使用字面量语法传递数值

 

var childNode = { template: '

{{myMessage}}的类型是{{type}}', props:['myMessage'], computed:{ type(){ return typeof this.myMessage } }}var parentNode = { template: `

`, components: { 'myChild': childNode }};// 创建根实例new Vue({ el: '#example', components: { 'MyParent': parentNode }})

登录后复制

Vue组件选项props的使用介绍

  因为它是一个字面 prop,它的值是字符串 “1” 而不是 number。如果想传递一个实际的 number,需要使用 v-bind,从而让它的值被当作JS表达式计算

var parentNode = { template: ` 

  

`, components: { 'myChild': childNode }};

登录后复制

Vue组件选项props的使用介绍

  或者可以使用动态props,在data属性中设置对应的数字1

var parentNode = { template: ` 

  

`, components: { 'myChild': childNode }, data(){ return { 'data': 1 } }};

登录后复制

props验证

  可以为组件的 props 指定验证规格。如果传入的数据不符合规格,Vue会发出警告。当组件给其他人使用时,这很有用

  要指定验证规格,需要用对象的形式,而不能用字符串数组

Vue.component('example', { props: { // 基础类型检测 (`null` 意思是任何类型都可以) 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 value > 10 } } }})

登录后复制

  type 可以是下面原生构造器

StringNumberBooleanFunctionObjectArraySymbol

登录后复制

  type 也可以是一个自定义构造器函数,使用 instanceof 检测。

  当 prop 验证失败,Vue 会在抛出警告 (如果使用的是开发版本)。props会在组件实例创建之前进行校验,所以在 default 或 validator 函数里,诸如 data、computed 或 methods 等实例属性还无法使用

  下面是一个简单例子,如果传入子组件的message不是数字,则抛出警告

 

var childNode = { template: '

{{message}}', props:{ 'message':Number }}var parentNode = { template: `

`, components: { 'child': childNode }, data(){ return{ msg: '123' } }};// 创建根实例new Vue({ el: '#example', components: { 'parent': parentNode }})

登录后复制

  传入数字123时,则无警告提示。传入字符串’123’时,结果如下所示

Vue组件选项props的使用介绍

  将上面代码中,子组件的内容修改如下,可自定义验证函数,当函数返回为false时,则输出警告提示

var childNode = { template: '

{{message}}

', props:{ 'message':{ validator: function (value) { return value > 10 } } }}

登录后复制

  在父组件中传入msg值为1,由于小于10,则输出警告提示

var parentNode = { template: ` 

  

`, components: { 'child': childNode }, data(){ return{ msg:1 } }};

登录后复制

Vue组件选项props的使用介绍

单向数据流

  prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解

  另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着不应该在子组件内部改变 prop。如果这么做了,Vue 会在控制台给出警告

  下面是一个典型例子

 

var childNode = { template: `

子组件数据

{{childMsg}} `, props:['childMsg']}var parentNode = { template: `

父组件数据

{{msg}} `, components: { 'child': childNode }, data(){ return { 'msg':'match' } }};// 创建根实例new Vue({ el: '#example', components: { 'parent': parentNode }})

登录后复制

  父组件数据变化时,子组件数据会相应变化;而子组件数据变化时,父组件数据不变,并在控制台显示警告

Vue组件选项props的使用介绍

  修改prop中的数据,通常有以下两种原因

  1、prop 作为初始值传入后,子组件想把它当作局部数据来用

  2、prop 作为初始值传入,由子组件处理成其它数据输出

  对于这两种情况,正确的应对方式是

  1、定义一个局部变量,并用 prop 的值初始化它

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

登录后复制

  2、定义一个计算属性,处理 prop 的值并返回

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

登录后复制

  [注意]JS中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Vue.js通用应用框架-Nuxt.js的解析

Vue.js通用应用框架-Nuxt.js的解析

以上就是Vue组件选项props的使用介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2748295.html

(0)
上一篇 2025年3月8日 04:44:12
下一篇 2025年3月3日 12:07:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue的项目优化之通过keep-alive数据缓存的方法

    本篇文章主要介绍了vue项目优化之通过keep-alive数据缓存的方法,内容挺不错的,现在分享给大家,也给大家做个参考。 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。 包裹动态组件时,会缓存不活动的组件实…

    编程技术 2025年3月8日
    200
  • Vue组件化开发的介绍

    这篇文章主要介绍了vue组件化开发的思考以及相关的原理介绍,如果你对此有兴趣,可以学习参考下。 一般说到组件,我首先想到的是弹窗,其他就大脑空白了。 因为觉得这个是在项目中最常用的功能,提取出来方便复用的才是组件~ 然而我才发现这个想法是有…

    2025年3月8日
    200
  • vue 渲染页面后div的滚动条保持在最底部的方法

    下面为大家分享一篇vue 每次渲染完页面后p的滚动条保持在最底部的方法,具有很好的参考价值,希望对大家有所帮助。 实例如下: //每次页面渲染完之后滚动条在最底部updated:function(){  this.$nextTick(fun…

    编程技术 2025年3月8日
    200
  • vue-cli项目中怎么使用mock数据

    本篇文章主要介绍了vue-cli项目中怎么使用mock数据 ,内容挺不错的,现在分享给大家,也给大家做个参考。 在vue项目中, mock数据可以使用 node 的 express模块搭建服务 1. 在根目录下创建 test 目录, 用来存…

    2025年3月8日
    200
  • VUE中v-bind的用法介绍

    本篇文章主要介绍了详解vue中v-bind的基本用法 ,内容挺不错的,现在分享给大家,也给大家做个参考。 这两天学习了v-bind的基本用法,所以,今天添加一点小笔记。 1. v-bind:class(根据需求进行选择) 1.1  .box…

    编程技术 2025年3月8日
    200
  • Vue多种方法实现表头和首列固定的方法

    本篇文章主要介绍了vue多种方法实现表头和首列固定的示例代码,内容挺不错的,现在分享给大家,也给大家做个参考。 有时表格太大,滚动时信息查看不方便,需要对表格进行全局表头、首列固定, 上效果: 一、创建多个表格进行覆盖 思路:当页面滚动到临…

    2025年3月8日
    200
  • 如何用vue快速开发app的脚手架工具

    这篇文章主要介绍了用vue快速开发app的脚手架工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 前言 多页面应用于结构较于简单的页面,因为简答的页面使用router又过于麻烦.本脚手架出于这样的场景被开发出…

    编程技术 2025年3月8日
    200
  • 如何处理vue axios请求超时的问题

    这篇文章主要介绍了vue axios请求超时,设置重新请求的完美解决方法,一并给大家介绍了axios基本用法,需要的朋友可以参考下 自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,如果服务器或者网络不稳定掉…

    2025年3月8日 编程技术
    200
  • vue脚手架中配置Sass的方法

    本篇文章主要介绍了vue脚手架中配置sass的方法,内容挺不错的,现在分享给大家,也给大家做个参考。 世界上最成熟、最稳定、最强大的专业级CSS扩展语言! 兼容CSSSass完全兼容所有版本的CSS。我们对此严格把控,所以你可以无缝地使用任…

    编程技术 2025年3月8日
    200
  • vue 实现剪裁图片并上传服务器的功能介绍

    这篇文章主要介绍了vue 实现剪裁图片并上传服务器功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下 预览链接点击预览 效果图如下所示,大家感觉不错,请参考实现代码。   需求 [x] 预览:根据选择图像大小自适应填充左侧裁剪区域 立即…

    2025年3月8日
    200

发表回复

登录后才能评论