Vue-Prop父组件向子组件传参

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。

点击查看 Prop-官方文档

一、父组件向子组件传参,

1.先将要prop传递的数据绑定在子组件在父组件中的实例里。
2.然后子组件里设置props进行数据接受,
3.并通过文本插值放入组件中。

【父组件】

<template>
  <div>
    我是父组件,姓{{firstName}}
    <son :firstName="firstName"></son> //绑定要传递给子组件的参数
  </div>
</template>

<script>
import Son from '../components/son'
export default {
  components: {
    Son}, //引入子组件 
  data () {
    return {
      firstName: '张'}}} //原信息
</script>

【子组件】

<template>
  <div>我是子组件,我姓{{firstName}}</div> //插值
</template>

<script>
export default {
  props: { //接收父组件传来的数据,并指定类型
    firstName: {
      type: String,
      required: true
    }},} 
</script>

二、注意:子组件中v:bind绑定的都是表达式而不是字符串。

<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:comment-ids="[234, 266, 273]"></blog-post>
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:author="{ name: 'Veronica', company: 'Veridian Dynamics' }"></blog-post>

三、prop一次传对象的多个值

如果想将一个对象的所有属性都作为prop传入,可以使用不带参数的v-bind。例如

<blog-post v-bind="post"></blog-post>

等价于

<blog-post
  v-bind:id="post.id"
  v-bind:title="post.title"
></blog-post>

四、子组件改变prop值

有两种常见情况,子组件试图改变一个prop的情形。
1、这个prop用来传递一个初始值,这个子组件接下来希望将其作为一个本地的prop数据来使用。这种情况,最好定义一个本地的data属性并将其这个prop用作其初始值。

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

2、这个prop以一种原始的值传入且需要进行转换。这种情况下,最好使用这个prop的值来定义一个计算属性。

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

注意在 JavaScript 中对象和数组是通过引用传入的,所以对于一个数组或对象类型的 prop 来说,在子组件中改变这个对象或数组本身将会影响到父组件的状态。

五、Prop验证

export default{
  data(){
    
  },
  props:{
    propA:{
      type : String,
      required : true, //表示必填
      default : "abc" , //默认值
 或 default : function(){
        return { message : "hello" }  //对象或数组且一定会从一个工厂函数返回默认值
      },
    propF{
        validator:function(value){
          //这个值必须匹配下列字符串中的一个
          return ['success','warning','danger'].indexof(value) !== -1
        }
     } 
    }
  }
}

注意那些 prop 会在一个组件实例创建之前进行验证,所以实例的属性 (如 data、computed 等) 在 default 或 validator 函数中是不可用的。???

type 可以是原生构造函数中的一个:String、Number、Boolean 、Array、Object、Date、Function、Symbol。也可以是一个自定义的构造函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,771评论 19 139
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,059评论 0 25
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 13,797评论 4 129
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,468评论 0 29
  • 1、全天看,两市低开震荡,延续近期区间整理格局。盘面上,金融股先抑后扬,资源股冲高回落,而题材股相对弱势,指数小幅...
    陈悦_Cyue阅读 583评论 0 1