vue ref放在标签与放在组件上的区别

ref 加在标签上 this.$refs是拿到dom ,  若ref加上组件上this.$refs拿到的是组件的引用

子组件B

<template>
  <div class="con">
    <p @click="add">{{num}}</p>
  </div>
</template>

<script type="text/ecmascript-6">
export default {
  data() {
    return {
     num: 0
    }
  },
  methods: {
    add() {
      this.num ++
      this.$emit('change')
    }
  },
}
</script>

<style>

.con p:first-child{
  background-color: pink;
}
</style>

父组件

<template>
  <div>
    <div ref='d' @click="setColor">hello </div>
    <row ref='one' @change='change1'></row>
    <row ref='two' @change='change1'></row>
    <p>{{totla}}</p>
  </div>
</template>

<script type="text/ecmascript-6">
import b1 from './B'
export default {
  data() {  
    return {
      num: 0,
      totla: 0
    }
  },
  methods: {
    setColor() {
      let d = this.$refs.d
      d.style.color = 'red'
    },
    change1() {
      let two= this.$refs.two
      console.log(two); //拿到的是组件的引用
      this.totla = this.$refs.one.num + this.$refs.two.num
    }
  },
  components: {
    row: b1
  }
}

还能控制子组件的显示与隐藏,调用子组件的方法及赋值

父组件

<template>
  <div>
    <p @click="go">go</p>
    <com-button ref='com'></com-button>
  </div>
</template>

<script>
import comButton from './comButton.vue';
export default {
  data() {
    return {
    }
  },
  components: {
    comButton,
  },
  methods: {
    go() {
      let res = 888
      this.$refs.com.isShow = true
      this.$refs.com.val = res
      this.$refs.com.name()
      this.$refs.com.open('777')
      this.$refs.com.open(['333'])
    },
  },
}
</script>

<style>

</style>

自组件comButton.vue

<template>
  <div v-show="isShow">
    this is comButton
    <p style="color:red;">父组件传来的值{{val}}</p>
    <p style="color:red;">父组件传来的值{{data}}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isShow: false,
      val: '',
      data: []
    }
  },
  
  methods: {
    name() {
      console.log('被调了')
    },
    open(data) {
      console.log(typeof data)
      
      this.data = data
    }
  },
}
</script>

<style>

</style>

效果图

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中,父组件可以通过`ref`和`teleport`来访问子组件的方法和属性,并将子组件的内容渲染到父组件的DOM结构中。因此,我们可以在父组件中触发一个事件,并通过`ref`和`teleport`来调用子组件的方法来显示弹框。以下是一个示例: 假设我们有一个名为`child`的子组件,它包含一个弹框。当父组件的按钮被点击时,它将触发一个事件,并通过`ref`和`teleport`来调用子组件的方法来显示弹框。 子组件的代码如下所示: ```vue <template> <teleport to="body"> <div v-if="showDialog"> Hello from child! </div> </teleport> </template> <script> import { ref } from 'vue' export default { setup() { const showDialog = ref(false) const openDialog = () => { showDialog.value = true } return { showDialog, openDialog } } } </script> ``` 在这里,我们使用了`teleport`来将子组件的内容渲染到父组件的DOM结构中。弹框的显示状态由`showDialog`变量控制。我们还定义了一个`openDialog`方法,用于在父组件中调用以显示弹框。 现在,让我们看看如何在父组件中触发该方法。父组件的代码如下所示: ```vue <template> <div> <button @click="openChildDialog">Click me</button> <div ref="child"></div> </div> </template> <script> import { ref } from 'vue' import child from '@/components/child.vue' export default { components: { child }, setup() { const childRef = ref(null) const openChildDialog = () => { childRef.value.openDialog() } return { childRef, openChildDialog } } } </script> ``` 在这里,我们使用了`ref`来访问子组件的内容,并将其注册为`childRef`的引用。我们还定义了一个`openChildDialog`方法,用于在子组件中调用子组件的`openDialog`方法。在这个方法中,我们使用`ref`属性来访问子组件并调用其方法。 需要注意的是,我们需要将子组件的内容放在一个`div`标签中,并将其注册为`childRef`的引用。这是为了使`teleport`能够正确地将子组件的内容渲染到父组件的DOM结构中。 所以,这就是如何在Vue 3中让父组件点击触发子组件的弹框的简单示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值