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

Raissa ·
更新时间:2024-09-20
· 627 次阅读

目录

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

这里主要使用了vue的$ref

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

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

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

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

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>

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。 



VUE 方法 属性值 属性

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章