Vue props $emit $refs

小知识 09-01 15:41

vue中$refs的用法及作用

$refs用来获取绑定的dom元素节点,类似于JS的document.getElementById(),比如我们绑定的一个div, <div ref="child">子元素内容</div>,即可使用 Vue.$refs.child 来进行元素的相关操作和属性信息获取。

vue中$emit的用法及作用

$emit在Vue中定义为触发当前实例上的事件。附加参数都会传给监听器回调,在实际开发中,我们用来父组件使用 props 把数据传给子组件。子组件使用 $emit 触发父组件的自定义事件。

vue中props的用法及作用

props在Vue中用来传值,它可以传对象、组数、字符串等,常用于父组件传给子组件。

1、$emit

子组件调用父组件的方法并传递数据

子组件:

<template>
  <button @click="emitEvent">点击我</button>
</template>
<script>
  export default {
    data() {
      return {
        msg: "我是子组件中的数据"
      }
    },
    methods: {
      emitEvent(){
        this.$emit('my-event', this.msg)
        //通过按钮的点击事件触发方法,然后用$emit触发一个my-event的自定义方法,传递this.msg数据。
      }
    }
  }
</script>

父组件:

<template>
  <div id="app">
    <child-a @my-event="getMyEvent"></child-a>
    <!--父组件中通过监测my-event事件执行一个方法,然后取到子组件中传递过来的值-->
  </div>
</template>
<script>
  import ChildA from './components/child.vue'
  export default {
    components: {
      ChildA
    },
    methods: {
      getMyEvent(msg){
          console.log('接收的数据--------->'+msg)//接收的数据--------->我是子组件中的数据
      }
    }
  }
</script>

2、$refs

父组件调用子组件的方法,可以传递数据

父组件:

<template>
  <div id="app">
    <child-a ref="child"></child-a>
    <!--用ref给子组件起个名字-->
    <button @click="getMyEvent">点击父组件</button>
  </div>
</template>
<script>
  import ChildA from './components/child.vue'
  export default {
    components: {
      ChildA
    },
    data() {
      return {
        msg: "我是父组件中的数据"
      }
    },
    methods: {
      getMyEvent(){
          this.$refs.child.emitEvent(this.msg);
          //调用子组件的方法,child是上边ref起的名字,emitEvent是子组件的方法。
      }
    }
  }
</script>

子组件:

<template>
  <button>点击我</button>
</template>
<script>
  export default {
    methods: {
      emitEvent(msg){
        console.log('接收的数据--------->'+msg)//接收的数据--------->我是父组件中的数据
      }
    }
  }
</script>