vue中ref 和 $refs理解

1,158 阅读1分钟

前言

如果觉得本文有帮助 记得点赞三连哦 十分感谢! 注意:js中想要获取dom节点一般用document.querySelecto('.input'),然后获取input的值。 在vue中绑定ref就不需要在获取dom节点了,直接绑定在input上,然后$refs调用即可

1.基本用法

<div id="app">
  <input type="text" ref="input"/>
  <button @click="add">添加</button>
</div>
<script>
    new Vue({
      el: "#app",
      methods:{
      add:function(){
        this.$refs.input.value ="test"; //this.$refs.input1 减少获取dom节点的消耗
        }
      }
    })
</script>

在javascript调用:this.$refs.input

2.获取子组件中的data

  • 子组件

<template>
  <div>{{ msg }}</div>
</template>
<script>
export default {
  data() {
    return {
      msg: "ref语法糖"
    }
  }
}
</script>
  • 父组件
<template>
  <div id="app">
    <Save ref="save"/>
    <button @click="setResult">获取Save(子组件)中的值</button>
  </div>
</template>
<script>
import Save from "./components/Save.vue";
export default {
  components: {
    Save
  },
  data() {
    return {}
  },
  methods: {
    setResult() {
      console.log(this.$refs.save.msg) //ref语法糖
    }
  }
};
</script>

3.调用子组件中的方法

  • 子组件
<template>
  <div></div>
</template>
<script>
export default {
  methods:{
    open(){
      console.log('我是子组件')
    }
  }
}
</script>
  • 父组件

<template>
  <div id="app">
    <Save ref="save"/>
    <button @click="setResult">获取Save(子组件)中的值</button>
  </div>
</template>
<script>
import Save from "./components/Save.vue";

export default {
  components: {
    Save
  },
  data() {
    return {}
  },
  methods: {
    setResult() {
      this.$refs.save.open();// 我是子组件
    }
  }
};
</script>

4.子组件调用父组件方法

  • 子组件

<template>
  <div></div>
</template>
<script>
export default {
  methods: {
    open() {
      this.$emit("refData");  //我是父组件
    }
  }
}
</script>
  • 父组件
<template>
  <div id="app">
    <Save ref="save" @refData="setData"/>
    <button @click="setResult">获取Save(子组件)中的值</button>
  </div>
</template>
<script>
import Save from "./components/Save.vue";
export default {
  components: {
    Save
  },
  data() {
    return {}
  },
  methods: {
    setResult() {
      this.$refs.save.open()
    },
    setData() {
      console.log('我是父组件')
    }
  }
};
</script>