vue组件间传参

1、父组件向子组件传参

  父组件:

    objVal: {name: 'aa', age: 18}

    <Nav  :title="msg"  :obj="objVal"  />

  子组件:

    第一种接收方法

    props: ['title', 'obj']

    第二种接收方法

    props: {

      title: String,  // 简写

      title:{    // 具体写法

        type: String,

        default: '标题'

      },

      obj: {

        name: String,

        age: Number

      }

    }

2、子组件向父组件传参

  子组件:

    <button  @click="del">删除</button>

    del( ){

      this.$emit('btn', '删除数据')

    }

  父组件:

    <Btn  @btn="receive" />

    receive(data){

      console.log(data)  // '删除数据'

    }

  子组件:

    <button  @click="del">删除</button>

    props: ["delData"]

    del( ){

      this.$emit('btn', this.delData)

    }

  父组件:

    <Btn  :delData="delData"  @btn="receive" />

    receive(data){

      data( )

    }

  

3、父组件使用子组件的数据或方法

  子组件:

    <button>子组件</button>

    msg:  '子组件数据'

    fun( ){console.log('子组件方法')}

  父组件:

    <p  ref="pp">父组件</p>

    <Btn  ref="btn"  />

    this.$refs.btn.msg  // '子组件数据'

    this.$refs.btn.fun( )  // '子组件方法'

    this.$refs.pp.style.color="red"

4、使用provide和inject传值

  父组件

  data(){

    return {

      title: '标题',

      obj:{

        name: '张三',

        sex: 'man'

      }

    }

  }

  provide(){

    return {

      msg: '信息',  // 不是响应式数据

      title: this.title,  // 不是响应式数据

      obj: this.obj  // 是响应式数据,必须是监听的对象

    }

  }

  mounted(){

    this._provided.msg = '改变信息'  // 

    this.title = '改变标题'

    this.obj.name = '李四'    

    this._provided.obj.sex = 'woman'

  }

  子组件

  {{msg}}  // 信息

  {{title}}  // 标题

  {{obj.name}}  // 李四

  {{obj.sex}}  // woman

  inject: ['msg', 'title', 'obj']

 

原文地址:https://www.cnblogs.com/cuishuangshuang/p/13458898.html