vue教程-父组件向子组件传递数据(传递动态props)

说明

使用 传递动态props,解决 vue教程-父组件向子组件传递数据(传递静态props) 中的问题

解决方式:通过 父组件向子组件传递数据 实现的,父组件 通过 v-bind 属性绑定, 子组件通过 props 接收

代码

只需要修改 父组件 App.vue,代码如下:

<template>
<!-- 模板 -->
  <div id="app">
    关键代码:传递动态Prop,属性名是 :name 或 v-bind:sex,表示属性值是在 data中定义的:
    <user-info :name="fname" v-bind:sex="fsex" :age="fage"/>
  </div>
</template>

<script>
//引入 UserInfo 组件
import UserInfo from './components/UserInfo'

export default {
  name: 'App',
  components: {
    'user-info':UserInfo //注册局部组件
  },
  data:function(){//定义数据
    return {
      fname:'张三',
      fsex:'男',
      fage:22
    }
  }
}
</script>

传值过程

动态传递的好处

按传入数据的类型处理,类型有:

  • string
  • number
  • boolean
  • array
  • object

案例

实现下图功能,需要 动态传递prop:

  • 年龄是 number 类型
  • 是否开心是 boolean 类型
  • 爱好是 array 类型(但显示是 object)

创建组件

在 components 目录下,创建 UserInfo4.vue 文件,内容如下:

<template>
    <div id="app">
        {{msg}}
        <div>昵称:{{name}}(类型:{{typeof name}})</div>
        <div>性别:{{sex}}(类型:{{typeof sex}})</div>
        <div>年龄:{{age+1}}(类型:{{typeof age}})</div>
        <div>是否开心:{{is_happy}}(类型:{{typeof is_happy}})</div>
        <div>
            爱好:<span v-for="(item,index) in likes" :key="index">{{ item }} </span>
            (类型:{{typeof likes}})
        </div>
    </div>
</template>
<script>
export default {
    data:function(){
        return {
            msg:'用户详情信息'
        }
    },
    props:['name','sex','age','is_happy','likes']//定义子组件时,需要指定 props ,作用是给组件定义属性,表示父组件要传入数据

}
</script>
<style scoped>
#app{
    border: red 1px solid;
}
</style>

使用组件

修改 App.vue 文件,内容如下:

<template>
<!-- 模板 -->
  <div id="app">
    传递动态Prop,属性值是在data中定义的:
    <user-info4 :name="fname" :sex="fsex" :age="fage" :is_happy="fis_happy" :likes="flikes"/>
  </div>
</template>

<script>
import UserInfo4 from './components/UserInfo4'

export default {
  name: 'App',
  components: {
    'user-info4':UserInfo4, //注册局部组件
  },
  data:function(){//定义数据
    return {
      fname:'张三',
      fsex:'男',
      fage:22,
      fis_happy:true,
      flikes:['王者荣耀','抖音','吃鸡']
    }
  }
}
</script>

原文出处:/show_1IX2j0Ua46hC.html