文章目录

  • 1、Prop 的大小写
  • 2、Prop 类型
  • 3、Prop验证
  • 4、传递静态|动态 Prop
  • 5、修改Prop数据

适用于:父子组件通信。

  • 如果父组件给子组件传递(函数)数据:本质是子组件给父组件传递数据;
  • 如果父组件给子组件传递的(非函数)数据:本质就是父组件给子组件传递数据。

路由组件也可以传递 props数据。

1、Prop 的大小写

HTML 中的 属性名大小写不敏感,浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名:

子组件接收数据:

Vue.component('blog-post', {// 在 JavaScript 中是 camelCase (驼峰命名法)props: ['postTitle'],template: '<h3>{{ postTitle }}</h3>'
})

父组件传数据:

<!-- 在 HTML 中是 kebab-case 短横线分隔命名 -->
<blog-post post-title="hello"></blog-post>

2、Prop 类型

子组件指定(限制)父组件传入的Prop的值的类型。当子组件接收到错误的类型时从浏览器的 JavaScript 控制台提示用户。

// 接收数据并对数据进行类型限制
props: {title: String,likes: Number,isPublished: Boolean,commentIds: Array,author: Object,callback: Function,contactsPromise: Promise // or any other constructor
}

不限制Prop类型是这样写:

// 简单的声明接收(不能声明不传过来的数据)
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']

3、Prop验证

在子组件定制接收的 prop 的验证方式,可以为 props 中的值提供一个带有验证需求的对象。如果有一个需求未满足,则 Vue 会在浏览器控制台中警告。

  props: {// 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)propA: Number,// 多个可能的类型propB: [String, Number],// 必填的字符串propC: {// propC的类型type: String,// 设置 propC 必须传递过来   required: true},// 带有默认值的数字propD: {type: Number,// propD可传可不传,不传则值默认为100default: 100},// 带有默认值的对象propE: {type: Object,// 对象或数组默认值必须从一个工厂函数获取default: function () {return { message: 'hello' }}},// 自定义验证函数propF: {validator: function (value) {// 这个值必须匹配下列字符串中的一个return ['success', 'warning', 'danger'].indexOf(value) !== -1}}}

4、传递静态|动态 Prop

传入一个字符串

传静态值:

<blog-post title="hello"></blog-post>

prop 通过 v-bind 动态赋值:

<!-- 动态赋予一个变量的值,该变量值post.title是字符串 -->
<blog-post v-bind:title="post.title"></blog-post><!-- 动态赋予一个复杂表达式的值 ,post.title和post.author值是字符串-->
<blog-postv-bind:title="post.title + ' and ' + post.author"
></blog-post>......
data() {return {post: { title:"aaa", author:"bbb" },}
}

以上传入的值都是字符串类型的,但任何类型的值都可以传给 prop,如:

传入一个数字

<!-- 即便 `42` 是静态的,仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:likes="42"></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:likes="post.likes"></blog-post>

传入一个布尔值

<!-- 包含该 prop 没有值的情况在内,都意味着 `true`。-->
<blog-post is-published></blog-post><!-- 即便 `false` 是静态的,仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:is-published="false"></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:is-published="post.isPublished"></blog-post>

传入一个数组

<!-- 即便数组是静态的,仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:comment-ids="[234, 266, 273]"></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:comment-ids="post.commentIds"></blog-post>

传入一个对象

<!-- 即便对象是静态的,仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-postv-bind:author="{name: 'Veronica',company: 'Veridian Dynamics'}"
></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:author="post.author"></blog-post>

传入一个对象的所有 property

<blog-post v-bind="post"></blog-post>
......
post: {id: 1,title: 'My Journey with Vue'
}

5、修改Prop数据

若想对接收的prop数据进行修改,则需要在data中重新定义,不能直接对prop修改,即this.postTitle = "hhh"会报错。

<h3>{{ postTitle }}</h3>
<h3>{{ myTitle }}</h3>
<button @click="xiu"></button>
......// 在 js 中是 camelCase 驼峰命名法 props: ['postTitle'],// 若想对接收的prop数据进行修改,则需要在data中重新定义,不能直接对prop修改,即this.postTitle = "hhh"会报错。......data() {return {myTitle: this.postTitle,}},methods: {xiu() {this.myTitle = "hhh";}}

注意:也可以不写:props: ['postTitle']来接收,因为this.$attrs中有 传来的数据postTitle ,可以直接使用。但是我们一般不这样写。因为不能限制类型,写着麻烦等。

当接收props: ['postTitle']时,this.$attrs中就不存在 传来的数据postTitle 了。

Vue的Prop配置相关推荐

  1. vue动画效果配置和弹层css sticky footer

    vue动画效果配置 有两种方式: 一种是css方式 需要注意 4 个(CSS)类名在 enter/leave 的过渡中切换: v-enter: 定义进入过渡的开始状态.在元素被插入时生效,在下一个帧移 ...

  2. redirect路由配置 vue_Web前端:Vue路由进阶配置

    大家好,我来了,本期为大家带来的前端开发知识是"Web前端:Vue路由进阶配置",有兴趣做前端的朋友,和我一起来看看吧! 1. 页面打开权限流程 页面是否能打开有以下两点判断: 1 ...

  3. vue-cli3中的vue.config.js配置

    vue-cli3中的vue.config.js配置 我的跨域是配置通过chrome浏览器的跨域设置,前端修改跨域问题,以此解决跨域的,故没有配置代理: const path = require('pa ...

  4. vue-router路由、mixin混入、vue-resource、axios、计算属性watch、moment.js、vuex、vue-cli、数据双向绑定、搭建vue环境、vue实例、配置启动项

    路由vue-router介绍: // 1.前端路由核心:锚点值的改变,根据不同的锚点值,渲染指定dom位置的不同数据.// 2.vue中,模板数据不是通过ajax请求的,而是调用函数获取到模板内容// ...

  5. vue.js路由配置vue-router的基础学习 - 概念篇

    文章目录 引言 · 相关问题小结: 一.动态路由匹配 (两种情况) A. 两种情况,代码对比: B. 两种情况,效果图对比: C. 提醒 · 仔细体会: D. 优先级的问题: 二.嵌套路由 引言 · ...

  6. Vue Cli3 项目 vue.config.js 配置

    Vue Cli3 项目 vue.config.js 配置 配置优化 一.js文件最小化处理 二.分割代码 三.图片资源压缩 四.开启gzip压缩 先看一下优化配置之前的文件大小 通过vue-cli3脚 ...

  7. Vue服务端配置示例

    Vue服务端配置示例 后端配置示例 #Apache <IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^in ...

  8. VSCode自定义代码片段11——vue路由的配置

    vue路由的配置 {// v'router// 11 如何自定义用户代码片段:VSCode =>左下角设置 =>用户代码片段 =>新建全局代码片段文件... =>自定义片段名称 ...

  9. 【vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud】

    vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud问答

最新文章

  1. 华为鸿蒙有机会吗,谷歌重压之下,华为鸿蒙还有机会翻盘吗?全球系统生态之争开启...
  2. C++迭代器iterator
  3. python模块、字符编码、文件读写
  4. rest接口自动化测试_REST服务的自动化测试
  5. gb2312编码表_汉字编码输入系统模型(一)
  6. Python极简代码压缩图像十到百倍
  7. dalsa工业相机8k参数_偏振光相机3——偏振应用
  8. php基础案例 购物车,php购物车实例(1/5)_PHP教程
  9. 网易的企业免费邮箱和腾讯的企业邮箱
  10. android端使用mockServer
  11. 华为光猫设置及拨号连接下开启移动热点
  12. php gethostbyname ipv6,支持IPV6方法
  13. 参数检验和非参数检验的区别
  14. 中国移动发布物联网操作系统 OneOS
  15. 轻量级微信小说小程序源码+UI不错/很火的
  16. 转行做程序员到底可不可行?转行前先考虑好以下几点
  17. Win系统 - 微信居然自带修复工具?快来试试
  18. Hadoop不是万能,破除七大迷思让你做应用好大数据
  19. POI生成word文档,包括标题,段落,表格,统计图(非图片格式)
  20. Python采集CSDN博客排行榜数据

热门文章

  1. 电脑微博批量删除-2023怎么批量删除微博网页版代码
  2. 俞敏洪:我为什么要每天读书?
  3. 手机(安卓)谷歌浏览器如何使用神马搜索(夸克搜索引擎)【同时也可自定义添加任何搜索引擎】
  4. [恶搞]【2011/6/5】小龙虾个头小了 价格涨了
  5. 不小心清空了回收站怎么恢复?恢复误删除的方法
  6. 还是Android AP配网哪些事
  7. 天津最新食品安全管理员模拟真题集及答案解析
  8. Android手机的像素密度(dpi)计算
  9. 非上市与上市公司股权激励的不同之处
  10. opp原则_面向过程编程(OPP) 和面向对象编程(OOP)的关系