桥亦

当驾孤舟

导航

关于vue组件的调用以及传值

参考文档

1. https://cn.vuejs.org/v2/api/#vm-props

2. https://cn.vuejs.org/v2/api/#vm-refs

3. https://cn.vuejs.org/v2/api/#vm-on

4. https://cn.vuejs.org/v2/api/#vm-emit

5. https://blog.csdn.net/chaochao466/article/details/82884966

6. https://www.jb51.net/article/139991.htm

 

个人浅解:

  • 父组件可以使用:key把数据绑定传给子组件,子组件使用props 接收。
  • 子组件可以使用 $emit 触发父组件的自定义事件。
  • vm.$emit( event, arg ) 可用于触发父组件内 使用 v-on( event, fn ) 监听的event 事件,并且将获取的参数 arg 传入对应的方法内fn;即子组件向父组件传值
  • vm.$emit( event, arg ) //触发当前实例上的事件    vm.$on( event, fn ); //监听event事件后运行 fn方法
  • $emit和$on的事件在同一个公共的实例上可使用 vm.$emit( event, arg )向vm.$on( event, fn ) 传递事件;即用 $on(eventName) 监听事件,使用 $emit(eventName) 触发事件,一旦 $emit 事件一触发,$on 则监听到 $emit 所派发的事件,派发出的命令和执行派执命令所要做的事都应是对应的
例:
//父组件parents.vue
<template>
    <child-a ref="childa" @clik="changeA"  :values="IT'S A">{{MessageA}}</child-b>
    <child-b ref="childb" @changeB="log">{{MessageB}}</child-b>
    <h1 @click="test">test</h1>
</template>
<script>
import childa from './Childa'
import childb from './Childb'

export  default{
    name: 'Parents',
    data(){
        return{
            MessageA:"AAA",
            MessageB:"BBB",
        }
    },
    components:{
        childa ,
        childb 
    },
    methods:{
        test(){
             this.$emit('css','123131');
             this.$on('css',(data)=>{this.log(data)});
             //此处必须使用箭头函数 ()=>{},否则接收不到参数
             //this.$on('css',(data)=>{console.log(data)});
        },
        log(data){
           console.log(data) 
        },
        changeA(){
            //父组件调用子组件的方法,childa是上边ref起的名字,testA是子组件的方法
            this.$refs.childa.testA();
        }
    }
}
</script>

//子组件childa.vue
<template>
    <h1 @click="send">{{values}}</h1>
</template>
<script>
export default{
    name: 'Childa',
     props:{ //父组件传值 可以是一个数组,对象
        values:{
          type:String,//类型为字符窜
          default:"123" //可以设置默认值
        }
  },
  methods:{
        testA(dataA){
           console.log("testA:"+dataA) 
        },
        send(){
            //向兄弟组件b传值
            this.$emit("Aevent","A send to B")
        }
    }
}
</script>

//子组件childb.vue
<template>
    <h1 @click="testB">{{values}}</h1>
</template>
<script>
export default{
    name: 'Childb',
    data(){
        return{
            values:"BBB",
        }
    },
  },
  mounted(){
  //监听事件Aevent,回调函数使用箭头函数;
    this.$on("Aevent",(val)=>{
      console.log("Aevent:"+val);
    })
  }
  methods:{
        testB(dataB){
           console.log("testB:"+dataB);
           //父组件已监听changeB,子组件触发后父组件调用对应方法
           this.$emit("changeB",dataB);
        }
    }
}
</script>

 

posted on 2021-03-31 17:35  桥亦驾孤舟  阅读(110)  评论(0编辑  收藏  举报