vue實現(xiàn)父組件獲取子組件的方法或?qū)傩灾翟斀?/h1>
更新時間:2022年03月31日 09:22:31 作者:mini74
這篇文章主要介紹了vue實現(xiàn)父組件獲取子組件的方法或?qū)傩灾翟斀?,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
父組件獲取子組件方法或?qū)傩灾?/h2>
vue的本質(zhì)就是每一塊只負責自己這一塊的工作,這樣更容易維護。
這里主要使用了vue的$ref
- 當用在一般的標簽上時,主要功能是獲取dom節(jié)點,進行一些dom的操作。
- 當使用在子組件上,可以用來獲取子組件的屬性。
那么下面我們要實現(xiàn)的就是如何在父組件上使用子組件的方法
目標:我需要實現(xiàn)一個在父組件上控制子組件的彈窗顯示,并且通過參數(shù)判斷顯示哪一個內(nèi)容。
首先我們很容易想到就是綁定一個點擊事件,并且攜帶一個參數(shù),并且獲取子組件的屬性,這樣在這個父組件中我并沒有控制子組件的開關(guān),只是我獲取了子組件的方法或者屬性,讓子組件自己控制開關(guān)。
//這里是子組件
<popup ?ref="popup"></popup>
//綁定點擊事件,并且攜帶參數(shù)
<div class="item-box" @click="showPop('teacher')">
//定義點擊事件
showPop(event) {
//獲取子組件的屬性/方法,這里是獲取popup子組件的show方法,并且攜帶參數(shù)
?? ?this.$refs.popup.show(event);
},
在子組件中就需要定義方法,控制顯示彈窗內(nèi)容,并且將傳遞過來的參數(shù)保存
//控制彈窗的顯示隱藏
<div v-show="showPopup">
? ? ?<!-- 關(guān)閉按鈕,點擊直接將showPopup定義為false-->
? ? ? <div class="closePopup" @click="showPopup = false"></div>
? ? ? <!-- 老師數(shù)量 -->
? ? ? //通過判斷type值控制顯示哪個彈窗內(nèi)容
? ? ? <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項目日常開發(fā)中,難免要把功能性組件抽離出來,這樣結(jié)構(gòu)就會出現(xiàn)父子組價,兄弟組件等,但是這樣就會涉及到不同組件需要互相使用其中的值得問題。
之前有說過通過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: {
? ? ? ? ? ? // 點擊新增按鈕,彈出新增數(shù)據(jù)源的彈框
? ? ? ? ? ? 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: {
? ? ? ? ? ? // 刪除選中的數(shù)據(jù)源(批量刪除)
? ? ? ? ? ? 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>
好了,以上就是父組件獲取子組件的值并且操作子組件的方法。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- vue父組件中獲取子組件中的數(shù)據(jù)(實例講解)
- vue父組件異步獲取數(shù)據(jù)傳給子組件的方法
- 詳解VUE里子組件如何獲取父組件動態(tài)變化的值
- Vue父組件如何獲取子組件中的變量
- vue 父組件通過$refs獲取子組件的值和方法詳解
- vue.js 子組件無法獲取父組件store值的解決方式
- vue子組件如何獲取父組件的內(nèi)容(props屬性)
- vue中實現(xiàn)子組件接收父組件方法并獲取返回值
- vue子組件獲取到它父組件數(shù)據(jù)的4種方法
- VUE父組件異步獲取數(shù)據(jù),子組件接收的值為空的問題
- vue父組件異步如何獲取數(shù)據(jù)傳給子組件
- vue3父組件使用ref獲取子組件的屬性和方法
- vue子組件實時獲取父組件的數(shù)據(jù)實現(xiàn)
相關(guān)文章
-
使用Vue3創(chuàng)建多布局系統(tǒng)的三種方法
布局是中大型網(wǎng)站或應用的基礎,假設你正在創(chuàng)建一個網(wǎng)頁應用,它包括主頁、營銷頁面和應用頁面,你不會想要為每一頁重復所有的工作,對吧,與Nuxt不同,Vue 3并沒有內(nèi)置的布局系統(tǒng),但是別擔心,這里將向你展示3種簡單的方法來實現(xiàn)這一點,需要的朋友可以參考下 2023-08-08
-
vue+flv.js+SpringBoot+websocket實現(xiàn)視頻監(jiān)控與回放功能
vue+springboot的項目,需要在頁面展示出海康的硬盤錄像機連接的攝像頭的實時監(jiān)控畫面以及回放功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧 2022-02-02
-
vue elementUI table 自定義表頭和行合并的實例代碼
這篇文章主要介紹了vue elementUI table 自定義表頭和行合并的實例代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下 2019-05-05
最新評論
父組件獲取子組件方法或?qū)傩灾?/h2>
vue的本質(zhì)就是每一塊只負責自己這一塊的工作,這樣更容易維護。
這里主要使用了vue的$ref
- 當用在一般的標簽上時,主要功能是獲取dom節(jié)點,進行一些dom的操作。
- 當使用在子組件上,可以用來獲取子組件的屬性。
那么下面我們要實現(xiàn)的就是如何在父組件上使用子組件的方法
目標:我需要實現(xiàn)一個在父組件上控制子組件的彈窗顯示,并且通過參數(shù)判斷顯示哪一個內(nèi)容。
首先我們很容易想到就是綁定一個點擊事件,并且攜帶一個參數(shù),并且獲取子組件的屬性,這樣在這個父組件中我并沒有控制子組件的開關(guān),只是我獲取了子組件的方法或者屬性,讓子組件自己控制開關(guān)。
//這里是子組件
<popup ?ref="popup"></popup>
//綁定點擊事件,并且攜帶參數(shù)
<div class="item-box" @click="showPop('teacher')">
//定義點擊事件
showPop(event) {
//獲取子組件的屬性/方法,這里是獲取popup子組件的show方法,并且攜帶參數(shù)
?? ?this.$refs.popup.show(event);
},在子組件中就需要定義方法,控制顯示彈窗內(nèi)容,并且將傳遞過來的參數(shù)保存
//控制彈窗的顯示隱藏 <div v-show="showPopup"> ? ? ?<!-- 關(guān)閉按鈕,點擊直接將showPopup定義為false--> ? ? ? <div class="closePopup" @click="showPopup = false"></div> ? ? ? <!-- 老師數(shù)量 --> ? ? ? //通過判斷type值控制顯示哪個彈窗內(nèi)容 ? ? ? <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項目日常開發(fā)中,難免要把功能性組件抽離出來,這樣結(jié)構(gòu)就會出現(xiàn)父子組價,兄弟組件等,但是這樣就會涉及到不同組件需要互相使用其中的值得問題。
之前有說過通過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: {
? ? ? ? ? ? // 點擊新增按鈕,彈出新增數(shù)據(jù)源的彈框
? ? ? ? ? ? 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: {
? ? ? ? ? ? // 刪除選中的數(shù)據(jù)源(批量刪除)
? ? ? ? ? ? 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>好了,以上就是父組件獲取子組件的值并且操作子組件的方法。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- vue父組件中獲取子組件中的數(shù)據(jù)(實例講解)
- vue父組件異步獲取數(shù)據(jù)傳給子組件的方法
- 詳解VUE里子組件如何獲取父組件動態(tài)變化的值
- Vue父組件如何獲取子組件中的變量
- vue 父組件通過$refs獲取子組件的值和方法詳解
- vue.js 子組件無法獲取父組件store值的解決方式
- vue子組件如何獲取父組件的內(nèi)容(props屬性)
- vue中實現(xiàn)子組件接收父組件方法并獲取返回值
- vue子組件獲取到它父組件數(shù)據(jù)的4種方法
- VUE父組件異步獲取數(shù)據(jù),子組件接收的值為空的問題
- vue父組件異步如何獲取數(shù)據(jù)傳給子組件
- vue3父組件使用ref獲取子組件的屬性和方法
- vue子組件實時獲取父組件的數(shù)據(jù)實現(xiàn)
相關(guān)文章
使用Vue3創(chuàng)建多布局系統(tǒng)的三種方法
布局是中大型網(wǎng)站或應用的基礎,假設你正在創(chuàng)建一個網(wǎng)頁應用,它包括主頁、營銷頁面和應用頁面,你不會想要為每一頁重復所有的工作,對吧,與Nuxt不同,Vue 3并沒有內(nèi)置的布局系統(tǒng),但是別擔心,這里將向你展示3種簡單的方法來實現(xiàn)這一點,需要的朋友可以參考下2023-08-08
vue+flv.js+SpringBoot+websocket實現(xiàn)視頻監(jiān)控與回放功能
vue+springboot的項目,需要在頁面展示出海康的硬盤錄像機連接的攝像頭的實時監(jiān)控畫面以及回放功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-02-02
vue elementUI table 自定義表頭和行合并的實例代碼
這篇文章主要介紹了vue elementUI table 自定義表頭和行合并的實例代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05

