最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue彈窗組件的使用(傳值),以及彈窗只能觸發(fā)一次的問題

 更新時間:2023年05月22日 17:19:57   作者:猴子都會我不會  
這篇文章主要介紹了vue彈窗組件的使用(傳值),以及彈窗只能觸發(fā)一次的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue彈窗組件的使用以及彈窗只能觸發(fā)一次

1.父組件引入并注冊子組件

import BusinessDialog from '../../components/BusinessDialog'
export default {
? components: {
? ? BusinessDialog
? },
? data() {
? ? return {
? ? ? dialog:false;
? ? };
? },

2.在父組件中使用子組件

?<business-dialog :dialog.sync="dialog"></business-dialog>
?//這里的dialog就是要傳遞給子組件的值,默認是false(不彈出)

3.事件觸發(fā)改變dialog的值

openDialog() {
? ? ? this.dialog = true
? ? },
? ? //在父組件中點擊編輯按鈕,觸發(fā)彈窗

以下是子組件的操作

export default {
//子組件通過props接收父組件傳遞過來的值 dialog控制彈窗的彈出及隱藏
? props: {
? ? dialog: {
? ? ? type: Boolean,
? ? ? default: false,
? ? },
? },
? data() {
? ? return {
? ? };
? },
? methods: {
? ? checkDate(val) {},
? ? //解決彈窗只能彈一次的問題(點擊確定和取消按鈕的時候,給dialog做一個重新賦值)
? ? confirm() {
? ? ? this.$emit("update:dialog", false);
? ? },
? ? cancle() {
? ? ? this.$emit("update:dialog", false);
? ? },
?? ?//子組件傳值給父組件(onChange是傳遞給父組件的事件名, true是傳遞給父組件的值)
?? ?this.$emit('onChange',true)
? },
};

父組件怎么接收子組件傳的值呢?

<business-dialog :dialog.sync="dialog" @onChange="getData"></business-dialog>
methods:{
getData(val) {
?? ?//這個val就是接收到的子組件傳遞過來的值啦~~~~
?? ?}
}

關于彈窗組件的優(yōu)化處理

在之前的項目中,發(fā)現(xiàn)很多頁面中有很多選擇各種數(shù)據(jù)的彈窗,如下:

一般來說,在vue的項目中寫成一個子組件,在父組件中引用即可。

問題在于

  • 1.在父組件中要定義變量,什么時候展示該子組件
  • 2.父子組件中的通信,父組件要定義方法傳給子組件調用
  • 3.大量的父組件需要用到這個組件時,難免要重復上面的操作

于是,我想出一種思路,可不可以在父組件中通過調用方法的方式調用這個子組件,不需要在父組件中定義變量定義方法,省去一部分代碼,如下:

this.alertWbs();   // 打開上面的彈窗

具體思路如下

當調用這個方法的時候采用Vue.extend動態(tài)構建一個組件,具體代碼如下:

import Vue from 'vue';
import wbs from './wbs';                // 子組件
const Wbs = Vue.extend(wbs);
var instance = null;                     // 這里做一個處理,只需要一個實例
export function alertWbs(){
    if(!instance){
        instance = new Wbs();
        instance.$mount();
        document.body.appendChild(instance.$el);
    }
    instance.projectAreaDialog = true;      // 控制子組件自己的顯示
}

這樣以后,調用alertWbs方法以后,子組件會顯示出來。

那么還存在另外一個問題,當子組件中選擇完了數(shù)據(jù)以后如何告知父組件

思路:在點擊子組件按鈕的時候,通知父組件,我已經(jīng)選好數(shù)據(jù)了。

如何通知?

第一時間想到的是Promise,利用Promise的機制,當我點擊了子組件的按鈕時將數(shù)據(jù)通過resolve的方式推送給父組件,那么父組件里面的方法就可以寫成這樣

this.alertWbs().then(res=>{
  console.log(res);    // 此時傳過來的res應該就是子組件中選擇的數(shù)據(jù)了
})

那么,改造一下子組件,讓子組件返回一個Promise對象

import Vue from 'vue';
import wbs from './wbs';
const Wbs = Vue.extend(wbs);
var instance = null;
export function alertWbs(){
    if(!instance){
        instance = new Wbs();
        instance.$mount();
        document.body.appendChild(instance.$el);
    }
    instance.projectAreaDialog = true;
    return new Promise((resolve,reject)=>{
        instance.promise = {       //  將promise掛載到子組件實例上,因為目前為止,誰也不知道什么時候resolve數(shù)據(jù)
            resolve,reject
        }
    })
}

在wbs.vue文件中

choose(value){
   this.promise.resolve(value);            //  向父組件傳值
   this.projectAreaDialog = false;       // 改變自己的狀態(tài),隱藏
}

大功告成?。?!

進一步優(yōu)化,父組件如何傳值給子組件呢?

在一個方法中,最容易想到的肯定是方法的參數(shù),改變一下父組件調用的方法

this.alertWbs(params).then(res=>{
  console.log(res);    // 此時傳過來的res應該就是子組件中選擇的數(shù)據(jù)了
})

子組件接受值

import Vue from 'vue';
import wbs from './wbs';
const Wbs = Vue.extend(wbs);
var instance = null;
export function alertWbs(params){
    if(!instance){
        instance = new Wbs();
        instance.$mount();
        document.body.appendChild(instance.$el);
    }
    instance.projectAreaDialog = true;
    instance.params = params;   // 直接放在子組件的實例上
    return new Promise((resolve,reject)=>{
        instance.promise = {       //  將promise掛載到子組件實例上,因為目前為止,誰也不知道什么時候resolve數(shù)據(jù)
            resolve,reject
        }
    })
}

當然為了讓子組件更加靈活,可以內(nèi)置一個鉤子函數(shù),當子組件顯示的時候自動調用,我這里用的是init方法,完整的代碼如下:

import Vue from 'vue';
import wbs from './wbs';
const Wbs = Vue.extend(wbs);
var instance = null;
export function alertWbs(){
    if(!instance){
        instance = new Wbs();
        instance.$mount();
        document.body.appendChild(instance.$el);
    }
    instance.projectAreaDialog = true;
    // init方法獲取頁面數(shù)據(jù)
    instance.init();
    return new Promise((resolve,reject)=>{
        instance.promise = {
            resolve,reject
        }
    })
}

init方法其實就是wbs.vue中的普通方法,需要定義

以上調用方法使用到的this,是由于該方法掛載在vue的原型對象上,不需要在每個組件中引用

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • vue中的事件綁定舉例詳解

    vue中的事件綁定舉例詳解

    這篇文章主要給大家介紹了關于vue中事件綁定的相關資料,事件綁定在Web開發(fā)中非常常見,我們經(jīng)常需要在頁面中為某個DOM元素綁定事件,如點擊、鼠標移動、鍵盤敲擊等等,需要的朋友可以參考下
    2023-09-09
  • vue element實現(xiàn)多個Formt表單同時驗證

    vue element實現(xiàn)多個Formt表單同時驗證

    這篇文章主要介紹了vue element實現(xiàn)多個Formt表單同時驗證方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vue qiankun微前端實現(xiàn)詳解

    Vue qiankun微前端實現(xiàn)詳解

    這篇文章主要為大家介紹了Vue qiankun微前端實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • vue/cli3版本打包如何去掉soucemap文件

    vue/cli3版本打包如何去掉soucemap文件

    這篇文章主要介紹了vue/cli3版本打包如何去掉soucemap文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue調用語音播放的方法

    vue調用語音播放的方法

    這篇文章主要為大家詳細介紹了vue調用語音播放的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 在vue中使用jointjs的方法

    在vue中使用jointjs的方法

    本篇文章主要介紹了在vue中使用jointjs的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • VUE組件中的 Drawer 抽屜實現(xiàn)代碼

    VUE組件中的 Drawer 抽屜實現(xiàn)代碼

    這篇文章主要介紹了VUE組件 之 Drawer 抽屜 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Vue Router去掉url中默認的錨點#

    Vue Router去掉url中默認的錨點#

    vue-router默認hash模式——使用URL的hash來模擬一個完整的URL,于是當URL改變時,頁面不會重新加載。這篇文章主要介紹了Vue Router去掉url中默認的錨點#,需要的朋友可以參考下
    2018-08-08
  • vue中的base64圖片轉網(wǎng)絡URL方式

    vue中的base64圖片轉網(wǎng)絡URL方式

    在Vue中,可以直接將Base64編碼的圖片賦值給img元素的src屬性,此外,也可以通過JavaScript的URL.createObjectURL()方法將Base64轉換為Blob URL,進而轉換為File對象,并可進一步轉換為PNG或其他格式的圖片,這種轉換技術在前端開發(fā)中非常實用
    2024-10-10
  • Vue實現(xiàn)萬年日歷的示例詳解

    Vue實現(xiàn)萬年日歷的示例詳解

    又是一個老生常談的功能,接下來會從零實現(xiàn)一個萬年日歷,從布局到邏輯,再到隨處可見的打卡功能。文中的示例代碼簡潔易懂,需要的可以參考一下
    2023-01-01

最新評論

涡阳县| 措美县| 吕梁市| 永寿县| 常德市| 中宁县| 莲花县| 汉寿县| 绵竹市| 白水县| 鄂尔多斯市| 枣强县| 仁寿县| 天柱县| 开远市| 安平县| 万州区| 武穴市| 新营市| 塘沽区| 涪陵区| 合阳县| 莱芜市| 稻城县| 成都市| 会理县| 贺州市| 邯郸市| 武威市| 闽侯县| 墨脱县| 吉木萨尔县| 霍州市| 乌拉特中旗| 南汇区| 化德县| 修水县| 子洲县| 吉木萨尔县| 合肥市| 芮城县|