Vue中props传递参数(父传子)

父组件要正向地向子组件传递数据或参数,子组件收到后,根据传递过来的数据不同,渲染不同的页面内容,或者执行操作。
这个正向传递数据的过程是通过props来实现的。子组件使用props来声明需要从父组件接受的数据。
注意的:
在js中对象和数组是引用类型,指向同一个内存空间,所以props是对象和数组时,在子组件内改变是会影响父组件的。

父组件中

<template>
    <div>
        <HelloWorld  :message1="messageToHelloWorld"></HelloWorld>
    <div/>
<template/>
<script>
import HelloWorld from './components/HelloWorld'

export default {
    
    
  name: 'App',
  data() {
    
    
    return {
    
    
      messageToHelloWorld:'我是父组件向下传递的信息'
    }
  },
  components: {
    
    
    HelloWorld
  }
}
</script>

子组件中

<template>
  <div class="hello">
    <h1>{
    
    {
    
     msg }}</h1>
    <h2>Essential Linkssss</h2>
    <h3>{
    
    {
    
     message1 }}</h3>
  </div>
</template>

<script>
export default {
    
    
  name: 'HelloWorld',
  props: ['message1'],
  data () {
    
    
    return {
    
    
      msg: 'Welcome to Your Vue.js App'
    }
  }
}
</script>

业务中,还有比较常用的组件验证:

Vue.component('my-component',{
    
    
   props:{
    
    
          //必须是数字类型
          propA:Number
          //必须是字符串或数字类型
          propB:[String,number]
          //布尔值,如果没有定义,默认值是true
          propC:{
    
    
            type:Boolean,
            default:true
          },
          //数字,而且是必传
          propD:{
    
    
            type:Number,
            required:true
          },
          //如果是数组或对象,默认值必须是一个函数来返回
          propE:{
    
    
            type:Array,
            default:function(){
    
    
                return [];
              }
          },
          //自定义一个验证函数
          propF:{
    
    
              validator:function (value){
    
    
                return value>10
             }
          }
    }
});

props的驼峰命名法

<div id="app">
        <cpn :c-info="info" :child-my-message="message"></cpn>  
    </div>

    <template id="cpn">
    <div>
        <h2>{
   
   {cInfo}}</h2>
        <h2>{
   
   {childMyMessage}}</h2>
    </div>
    </template>
 const cpn={
    
    
            template:'#cpn',
            props:{
    
    
                cInfo:{
    
    
                    type:Object,
                    default(){
    
    
                        return{
    
    }
                    }    
                },
                childMyMessage:{
    
    
                    type:String,
                    default: ''
                }
            }
        }
        const app=new Vue({
    
    
            el:'#app',
            data:{
    
    
                info:{
    
    
                    name:'why',
                    age:18,
                    height:1.88
                },
                message:'hello world'    
            },
            components:{
    
    
                cpn
            }
        })

猜你喜欢

转载自blog.csdn.net/qq_42526440/article/details/115129511
今日推荐