第十九节:带你梳理Vue2: 父组件向子组件传参(props传参)

1. 组件嵌套

1.1 组件的嵌套使用

之前有说过,Vue组件跟Vue实例是一样的,因此在Vue中一个组件中也可以定义并使用自己的局部组件,这就是组件的嵌套使用

例如:示例代码如下:

<div id="app">
     <!-- 3. 使用组件 -->
    <my-component></my-component>
</div>

<script>
    // 子组件选项
    let sonComponent = {
     
        template:`
            <span>我是子组件</span>
        `,
    }

    //  父组件选项对象
    let MyComponent = {
     
        template: `
            <div>
                <h2>我是父组件</h2>
                <my-son></my-son>
                <my-son />
            </div>
        `,
        // 将子组件定义为父组件的局部组件
        components: {
     
            mySon: sonComponent
        }
    }
   
    // 2. 注册局部组件
    const vm = new Vue({
     
        el:"#app",
        
        components: {
     
            "MyComponent": MyComponent
        }
    })
</script>

显示结果:

组件的嵌套使用.png

通过示例我们就了解到,组件可以嵌套使用,那么我们就不得不思考一个问题,他们各自之间的数据关系如何?能否相互使用对方的数据呢?

1.2 组件间的数据关系

组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。

示例代码如下

<div id="app">
     <!-- 3. 使用组件 -->
    <my-component></my-component>
</div>

<script>
    // 子组件选项
    let sonComponent = {
     
        template:`
            <span>我是子组件{
      {msg}}</span>
        `,
    }
  

    //  父组件选项对象
    let MyComponent = {
     
        template: `
            <div>
                <h2>我是父组件</h2>
                <h3>父组件中使用子组件</h3>
                <my-son></my-son>
                <my-son />

                <h3>父组件中使用父组件数据</h3>
                {
      { msg }}
            </div>
        `,
        data(){
     
            return {
     
                msg: "哈哈,我是父组件数据"
            }
        },
        // 将子组件定义为父组件的局部组件
        components: {
     
            mySon: sonComponent
        }
    }
   
    // 2. 注册局部组件
    const vm = new Vue({
     
        el:"#app",
        
        components: {
     
            "MyComponent": MyComponent
        }

    })
  
  
</script>

显示结果:

子组件中错误的使用父组件数据.png

如果在子组件中强行使用父组件的数据 ,就会报错,
那么子组件如何才能获取父组件的数据呢?


2. props 属性

父组件可以使用 props 把数据传给子组件。

2.1 props基本使用

父组件在使用子组件时, 可以将父组件的数据绑定到子组件的自定义标签上,

子组件在选项中添加一个props属性来接收数据

示例代码如下:

<div id="app">
    <!-- 使用组件 -->
    <my-component></my-component>
</div>

<!-- 子组件模板 -->
<template id="son">
    <div>
        <table border="1">
            <tr colspan="3">子组件数据</tr>
            <tr>
                <td>my name</td>
                <td>{
  { myName }}</td>
            </tr>
            <tr>
                <td>my age</td>
                <td>{
  { myAge }}</td>
            </tr>
        </table>
    </div>
</template>

<!-- 父组件模板 -->
<template id="MyComponent">
    <div>
        <h2>显示父组件传给子组件的数据</h2>
        <!-- 通过两个组件的契合点,父组件通过自定义属性将数据传递给子组件 -->
        <!-- 在属性传输数据的时候使用连字符语法 -->
        <my-son :my-name="name" :my-age="age"></my-son>
    </div>
</template>

<script>
    // 子组件选项
    let sonComponent = {
     
        // 子组件通过props接受数据并使用
        // 数组里放父组件中自定义属性的名字
        // props 里面使用驼峰写法
        props:["myName","myAge"],
        template:`#son`,
    }


    //  父组件选项对象
    let MyComponent = {
     
        template: `#MyComponent`,
        data(){
     
            return {
     
                name:"wuwei",
                age:18
            }
        },
        // 将子组件定义为父组件的局部组件
        components: {
     
            mySon: sonComponent
        }
    }

    //  实例中注册组件
    const vm = new Vue({
     
        el:"#app",

        components: {
     
            "MyComponent": MyComponent
        }

    })

</script>

显示结果:

父组件通过props向子组件传值.png


2.2 数据传递分类

都知道在JS中数据分为两大类,基本数据类型和引用数据类型

因此在父组件向子组件传递数据时也分为两种:为传值和传引用

传值:String Number Boolean

传引用: Array Object

那么接下来我们好好研究研究两者的不同


2.2.1 传递的是基本类型

基本类型,顾名思义,就是传递JS基本数据类型的数据

示例代码如下:

<div id="app">
  <conter :count="3"></conter>
  <conter :count="4"></conter>
</div>

<script>
  var conter = {
     
    props: 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员付杰

欢迎投喂, 一起共享知识的盛宴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值