Vue props配置

1、props配置项

props的作用是让组件接收外部传过来的数据(接收参数)

2、组件传参

向组件Student传入参数:name,sex,age

<!-- 第一种方式:直接写参数名=xxx ,传入的是字符串形式-->
<Student name="李四" sex="女" age="18"/>

<!-- 第二种方式 动态绑定的方式传入v-bind:xxx,简写形式为:xxx。动态绑定的方式会将引号里的内容按表达式来解析后再传参-->
<Student :name="李四" :sex="女" :age="18"/>

3、组件接收参数

第一种方式(直接接收,常用)

<template>
    <div>
        <h1>{{msg}}</h1>
        <h2>学生姓名:{{name}}</h2>
        <h2>学生性别:{{sex}}</h2>
        <h2>学生年龄:{{age}}</h2>
    </div>
</template>

<script>
    export default {
        name:'Student',
        data() {
            console.log(this)
            return {
                msg:'我在上幼儿园大班',
            }
        },//简单声明接收,接收的是字符串,比如age传入的是数字,接收后的也是字符串,要计算需要进行转换
        props:['name','age','sex'] 
    }
</script>

 第二种方式(限制参数类型)

<template>
    <div>
        <h1>{{msg}}</h1>
        <h2>学生姓名:{{name}}</h2>
        <h2>学生性别:{{sex}}</h2>
        <h2>学生年龄:{{age}}</h2>
    </div>
</template>

<script>
    export default {
        name:'Student',
        data() {return {
                msg:'我在上幼儿园大班'
            }
        },

        //接收的同时对数据进行类型限制。注意,虽然有限制,但是传参后页面依然会显示,只是控制台会报错
        props:{
            name:String,
            age:Number,
            sex:String
        }
    }
</script>

 

第三种方式(限制类型、限制必要性、指定默认值)

<template>
    <div>
        <h1>{{msg}}</h1>
        <h2>学生姓名:{{name}}</h2>
        <h2>学生性别:{{sex}}</h2>
        <h2>学生年龄:{{age}}</h2>
    </div>
</template>

<script>
    export default {
        name:'Student',
        data() {return {
                msg:'我在上幼儿园大班'
            }
        },

        //接收的同时对数据:进行类型限制+默认值的指定+必要性的限制
        props:{
            name:{
                type:String, //name的类型是字符串
                required:true, //name是必要的
            },
            age:{
                type:Number,
                default:99 //设置默认值
            },
            sex:{
                type:String,
                required:true
            }
        }
    }
</script>

 

4、props注意点

  • props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。
  • props和data中声明的属性名不能重复
  • props声明的属性名不能为一些关键字,如key,ref
<template>
    <div>
        <h1>{{msg}}</h1>
        <h2>学生姓名:{{name}}</h2>
        <h2>学生性别:{{sex}}</h2>
        <h2>学生年龄:{{myAge+1}}</h2>
        <button @click="updateAge">尝试修改收到的年龄</button>
    </div>
</template>

<script>
    export default {
        name:'Student',
        data() {return {
                msg:'我在上幼儿园大班',
                myAge:this.age //将props属性复制到data中进行修改操作。props上的属性会优先被放到vc上,所以这里是可以直接读的
            }
        },
        methods: {
            updateAge(){
                this.myAge++
            }
        },
        //简单声明接收
        props:['name','age','sex']
    }
</script>

5、props接收函数,

props可以接收使用者传递的函数,并调用,同时可以回传参数给使用者。即由子向父传递参数

<!-- 父组件App.vue -->
<template>
    <div>
        <!-- 给子组件传递了一个方法 -->
        <School :parentAdd="parentAdd"></School>
    </div>
</template>

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

    export default {
        name:'App',
        components:{School},
        methods: {
            parentAdd(options){
                console.info(options)
            }
        },
    }
</script>

 

<!-- 子组件School.vue -->
<template>
    <div class="school">
        <button @click="sumAdd">调用父组件方法</button>
    </div>
</template>

<script>
    export default {
        name:'School',
        //props接收传递的函数
        props:["parentAdd"],
        methods:{
            sumAdd(){
                //调用接收的函数,并传递参数。因为props接收后在vc上,所以可以直接通过this使用
                this.parentAdd("invoked by sun111")
            }
        }
    }
</script>

 

posted @ 2022-11-17 11:10  weslie  阅读(113)  评论(0编辑  收藏  举报