vue3.0

vue3.0中不能使用$ref获取Dom
$nextTick 改为 nextTick函数 需要vue中引入

  1. import {ref} from 'vue'
  2. export default {
  3. setup(){
  4. //<xx ref='box'>
  5. // 类$refs获取节点, 必须return出去
  6. let box = ref(null)
  7. nextTick(()=>{
  8. console.log(box.value.innerHTML);
  9. })
  10. //如果是typescript
  11. let box = ref<HTMLElement | null>(null)
  12. nextTick(()=>{
  13. console.log(box.value?.innerHTML);
  14. })
  15. //<xx ref='loginC'>
  16. //(组件也一样)
  17. let loginC = ref(null)
  18. return {sum,box}
  19. }
  20. }

vue3.2

(代替$ref) defineExpose 获取子组件中的属性值

子组件 defineExpose暴露

  1. <script lang="ts" setup>
  2. import { reactive, ref ,defineExpose } from "vue";
  3. let sex=ref('男')
  4. let info=reactive({
  5. like:'喜欢李诗晴',
  6. age:27
  7. })
  8. // 将组件中的属性暴露出去,这样父组件可以获取
  9. defineExpose({
  10. sex,
  11. info
  12. })
  13. </script>

父组件 ref接收

  1. <template>
  2. <div class="home">
  3. <HelloWorld ref="testRef"></HelloWorld>
  4. <button @click="getSonHander">获取子组件中的数据</button>
  5. </div>
  6. </template>
  7. <script lang="ts" setup>
  8. import test from '@/components/test.vue';
  9. import {ref} from 'vue'
  10. //类似$ref获取组件节点
  11. const testRef = ref()
  12. const getSonHander=()=>{
  13. console.log('获取子组件中的性别', testRef.value.sex );
  14. console.log('获取子组件中的其他信息', testRef.value.info );
  15. }
  16. </script>

image.png