Vue知识整理——子父组件双向绑定、获取DOM元素

58 阅读1分钟

V-model来实现子父组件的双向绑定

<div>
    <input type="text" v-model="msg">
    <!--等价于-->
    <input type="text" :value="msg" @input="msg = $event.target.value"
</div>

v-model其实就是 :value和@input事件的简写

  • 子组件:props通过value接收数据,事件触发 input
  • 父组件:v-model直接绑定数据
<!--子组件-->
<select :value="value" @change="handleChange">...</select>
props: {
  value: String
},
methods: {
  handleChange (e) {
    this.$emit('input', e.target.value)
  }
}

<!--父组件-->
<BaseSelect v-model="selectId"></BaseSelect>

.sync修饰符来实现双向绑定

.sync修饰符 就是 :属性名@update:属性名 合写

<template>
  <div class="app">
    <button @click="openDialog">退出按钮</button>
    <BaseDialog :isShow="isShow"></BaseDialog>
  </div>
</template>

<script>
import BaseDialog from './components/BaseDialog.vue'
export default {
  data() {
    return {
      isShow: false,
    }
  },
  components: {
    BaseDialog,
  },
}
</script>

<style>
</style>

<template>
  <div class="base-dialog-wrap" v-show="isShow">
    <div class="base-dialog">
      <div class="title">
        <h3>温馨提示:</h3>
        <button class="close">x</button>
      </div>
      <div class="content">
        <p>你确认要退出本系统么?</p>
      </div>
      <div class="footer">
        <button>确认</button>
        <button>取消</button>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    isShow: Boolean,
  }
}
</script>

$refs和ref获取DOM元素和组件

利用ref 和 $refs 可以用于 获取 dom 元素 或 组件实例,查找范围是当前组件内

  1. 给要获取的盒子添加ref属性
<div ref="chartRef">我是渲染图表的容器</div>
  1. 获取时通过 refs获取this.refs获取 this.refs.chartRef 获取
mounted () {
  console.log(this.$refs.chartRef)
}