vue实现父组件获取子组件的方法或属性值详解

 更新时间:2022年03月31日 09:22:31   作者:mini74  
这篇文章主要介绍了vue实现父组件获取子组件的方法或属性值详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

父组件获取子组件方法或属性值

vue的本质就是每一块只负责自己这一块的工作,这样更容易维护。

这里主要使用了vue的$ref

  • 当用在一般的标签上时,主要功能是获取dom节点,进行一些dom的操作。
  • 当使用在子组件上,可以用来获取子组件的属性。

那么下面我们要实现的就是如何在父组件上使用子组件的方法

目标:我需要实现一个在父组件上控制子组件的弹窗显示,并且通过参数判断显示哪一个内容。

首先我们很容易想到就是绑定一个点击事件,并且携带一个参数,并且获取子组件的属性,这样在这个父组件中我并没有控制子组件的开关,只是我获取了子组件的方法或者属性,让子组件自己控制开关。

//这里是子组件
<popup  ref="popup"></popup>
//绑定点击事件,并且携带参数
<div class="item-box" @click="showPop('teacher')">
//定义点击事件
showPop(event) {
//获取子组件的属性/方法,这里是获取popup子组件的show方法,并且携带参数
    this.$refs.popup.show(event);
},

在子组件中就需要定义方法,控制显示弹窗内容,并且将传递过来的参数保存

//控制弹窗的显示隐藏
<div v-show="showPopup">
     <!-- 关闭按钮,点击直接将showPopup定义为false-->
      <div class="closePopup" @click="showPopup = false"></div>
      <!-- 老师数量 -->
      //通过判断type值控制显示哪个弹窗内容
      <teacher v-if="type =='teacher'"></teacher>
      <student v-else-if="type =='student'"></student>
      <turnover v-else></turnover>
</div>
//在data中定义默认值
data(){
     return {
          showPopup: false,
          type: ''
      }
  },
//最后在methods中定义show方法,控制弹窗的显示
methods:{
   show(type){
        this.type = type
        this.showPopup = true;
    }
}

这样就完成了,每个组件只负责我自己需要做的事情,不会影响到其他组件,这样更易于维护。 

父组件获取子组件中的变量

在vue项目日常开发中,难免要把功能性组件抽离出来,这样结构就会出现父子组价,兄弟组件等,但是这样就会涉及到不同组件需要互相使用其中的值得问题。

之前有说过通过ref来让父组件操作子组件,并且传值,那么我们今天来详细看看。

案例一:点击父组件的按钮,操作子组件显示

注:可以通过获取id/class来操作,这里我就不介绍这种方法了,至于jquery的话,在vue中还是慎用。

介绍:这里通过给子组件绑定ref属性,引号命名自定义,然后父组件通过 this.$refs.名字 就可以操作子组件的元素,以改变它的样式等。

<template>
    <div class="DbSource-box">
        <el-button type="primary" icon="" class="addBtn" @click="addDbSource()">新增</el-button>
        <db-source-add ref="addAlert" v-on:init="init"></db-source-add>
    </div>
</template>
<script>
    import DbSourceAdd from "../components/DbSourceManager/DbSourceAdd";
    export default {
        name: "DbSourceManager",
        components: {DbSourceAdd},
        methods: {
            // 点击新增按钮,弹出新增数据源的弹框
            addDbSource(){
                this.$refs.addAlert.$el.style.display = "block";
            },
        }
    }
</script>

案列二:获取子组件data中的变量

父组件:

这里通过给子组件绑定ref属性,引号中的命名自定义,然后父组件通过 this.$refs.名字.变量名 就可以获得子组件中的值

<template>
    <div class="DbSource-box">
        <el-button type="primary" icon="" class="selectBtn" @click="deleteSelectDbSource()">批量删除</el-button>
        <db-source-table ref="getSelectData" :Data="Data" v-on:init="init"></db-source-table>
    </div>
</template>
<script>
    import DbSourceTable from "../components/DbSourceManager/DbSourceTable";
    export default {
        name: "DbSourceManager",
        components: {DbSourceTable},
        methods: {
            // 删除选中的数据源(批量删除)
            deleteSelectDbSource(){
                console.log(this.$refs.getSelectData.multipleSelection)
            },
        }
    }
</script>

子组件:

<template>
    <div class="table-box">
        
    </div>
</template>
<script>
    export default {
        name: "DbSourceTable",
        props:["Data"],
        data(){
            return {
                multipleSelection:[],
                pagesize: 3,
                currpage: 1,
                currId:""
            }
        }
</script>

好了,以上就是父组件获取子组件的值并且操作子组件的方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 使用Vue3创建多布局系统的三种方法

    使用Vue3创建多布局系统的三种方法

    布局是中大型网站或应用的基础,假设你正在创建一个网页应用,它包括主页、营销页面和应用页面,你不会想要为每一页重复所有的工作,对吧,与Nuxt不同,Vue 3并没有内置的布局系统,但是别担心,这里将向你展示3种简单的方法来实现这一点,需要的朋友可以参考下
    2023-08-08
  • vue中设置height:100%无效的问题及解决方法

    vue中设置height:100%无效的问题及解决方法

    这篇文章主要介绍了vue中设置height 100%无效的问题及解决方法,需要的朋友可以参考下
    2018-07-07
  • vue+flv.js+SpringBoot+websocket实现视频监控与回放功能

    vue+flv.js+SpringBoot+websocket实现视频监控与回放功能

    vue+springboot的项目,需要在页面展示出海康的硬盘录像机连接的摄像头的实时监控画面以及回放功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-02-02
  • vue实现书籍购物车功能

    vue实现书籍购物车功能

    这篇文章主要为大家详细介绍了vue实现书籍购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • vue之如何实现打印功能

    vue之如何实现打印功能

    这篇文章主要介绍了vue之如何实现打印功能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vue elementUI table 自定义表头和行合并的实例代码

    vue elementUI table 自定义表头和行合并的实例代码

    这篇文章主要介绍了vue elementUI table 自定义表头和行合并的实例代码,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • vue3组件式弹窗打开的3种方式小结

    vue3组件式弹窗打开的3种方式小结

    这篇文章主要给大家介绍了关于vue3组件式弹窗打开的3种方式,弹窗组件是常见的交互组件,它能够弹出一些提示信息、提醒用户进行操作等等,需要的朋友可以参考下
    2023-07-07
  • Vue中如何进行数据响应式更新

    Vue中如何进行数据响应式更新

    Vue是一款流行的JavaScript框架,它提供了数据响应式更新的能力,可以让我们轻松地更新数据,并自动更新视图,本文将介绍Vue中如何进行数据响应式更新,包括使用Vue的响应式系统、使用计算属性和使用Vue的watcher,需要的朋友可以参考下
    2023-06-06
  • 使用Vue后如何针对搜索引擎做SEO优化

    使用Vue后如何针对搜索引擎做SEO优化

    本文介绍了Vue.js在SEO优化方面的挑战,并提供了一些方法来解决这些问题,包括使用服务器端渲染、预渲染和使用VueRouter的History模式来生成静态HTML页面,以及添加meta信息和内部链接来提高搜索引擎的索引和排名
    2025-02-02
  • vue-cli3单页构建大型项目方案

    vue-cli3单页构建大型项目方案

    这篇文章主要介绍了vue-cli3单页构建大型项目方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04

最新评论