vue子組件封裝彈框只能執(zhí)行一次的mounted問題及解決
vue子組件封裝彈框只能執(zhí)行一次的mounted
封裝了一個子組件來處理彈框內(nèi)容,發(fā)現(xiàn)只能執(zhí)行一次,在父組件添加一個 v-if 即可,當每次彈框關(guān)閉的時候銷毀掉該組件就沒有問題了。
貼一下簡易代碼:
父組件:
<add-dialog v-if="addVisible" :dialogVisible="addVisible" @addClose="addClose"></add-dialog> addClose () { this.addVisible = false }
子組件:
<template> <div class="box"> <el-dialog title="提示" :visible.sync="dialogVisible" :before-close="handleClose"> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="dialogVisible = false">確 定</el-button> </span> </el-dialog> </div> </template> <script> export default { props: { dialogVisible: Boolean }, watch: { dialogVisible: function () { this.$emit('addClose') } } } </script>
vue mounted方法在什么情況下使用和js定時器使用
在常見的博客中都會這樣寫到
created
:在模板渲染成html前調(diào)用,即通常初始化某些屬性值,然后再渲染成視圖。mounted
:在模板渲染成html后調(diào)用,通常是初始化頁面完成后,再對html的dom節(jié)點進行一些需要的操作。
在實際的開發(fā)過程中我們會經(jīng)常使用create方法,在頁面還未渲染成html前,調(diào)用函數(shù),從后端獲取數(shù)據(jù),在實現(xiàn)對頁面的數(shù)據(jù)進行顯示。
比如說下面例子
created() { ? ? ? if(this.$route.params.id) ? ? ? ? this.orderNo=this.$route.params.id ? ? ? this.getOrderInfo() ? ? }, ? ? methods:{ ? ? ? getOrderInfo(){ ? ? ? ? order.getOrderByNum(this.orderNo).then(resp=>{ ? ? ? ? ? this.order=resp.data.data.data ? ? ? ? ? console.log((this.order)) ? ? ? ? ? //根據(jù)訂單中的老師id,獲取老師姓名 ? ? ? ? ? getDetailTeacher(this.order.teacherName).then( ? ? ? ? ? ? resp=>{ ? ? ? ? ? ? ? this.teacherName=resp.data.data.teacher.name ? ? ? ? ? ? ? console.log(this.teacherName) ? ? ? ? ? ? } ? ? ? ? ? ) ? ? ? ? }).catch(error=>{ ? ? ? ? }) ? ? ? },
我們在什么時候使用mounted方法?
mounted通常是在一些插件的使用或者組件的使用中進行操作 也就是頁面渲染之后執(zhí)行 通常情況下我們會在沒有相應(yīng)的點擊事件,但需要在頁面展示過程中去不斷調(diào)用某一函數(shù)情況下使用。
比如說在常見的訂單支付功能,我們點擊立即付款后,跳轉(zhuǎn)到付款頁面。
這是時候需要我們不斷訪問后端接口查看用戶是否支付成功,支付成功后進行跳轉(zhuǎn)。
我們需要將查詢函數(shù)的調(diào)用寫在mounted函數(shù)中,并通過計時器不斷調(diào)用。
? ?mounted() { //頁面渲染之后執(zhí)行,設(shè)置為3s一更新 ? ? ? this.timer1 = setInterval(() => { ? ? ? ? this.queryOrderStatus(this.payObj.out_trade_no) ? ? ? }, 3000); ? ? }, ? methods: { ? ? ? ? ? //支付跳轉(zhuǎn) ? ? ? queryOrderStatus(orderNo) { ? ? ? ? orderApi.queryPayStatus(orderNo) ? ? ? ? ? .then(response => { ? ? ? ? ? ? if (response.data.success) { ? ? ? ? ? ? ? //支付成功,清除定時器 ? ? ? ? ? ? ? clearInterval(this.timer1) ? ? ? ? ? ? ? //提示 ? ? ? ? ? ? ? this.$message({ ? ? ? ? ? ? ? ? type: 'success', ? ? ? ? ? ? ? ? message: '支付成功! ??' ? ? ? ? ? ? ? }) ? ? ? ? ? ? ? //跳轉(zhuǎn)回到課程詳情頁面 ? ? ? ? ? ? ? this.$router.push({ ? ? ? ? ? ? ? ? path: '/course/' + this.payObj.course_id ? ? ? ? ? ? ? }) ? ? ? ? ? ? } ? ? ? ? ? }) ? ? ? } ? ? }
定時器方法介紹
this.time1=setInterval(()=>{ this.queryPayStatus(this.this.payObj.out_trade_no) },3000)
setInterval()有兩個參數(shù)一個是要執(zhí)行的函數(shù),一個是要執(zhí)行的時間間隔單位為毫秒,此處函數(shù)采用箭頭函數(shù)
ES5 語法如下
setInterval(function(){ alert(“Hello”); }, 3000);
將定時器賦給time 對象
清除定時器 clearInterval(this.time1)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue+ECharts實現(xiàn)中國地圖的繪制及各省份自動輪播高亮顯示
這篇文章主要介紹了Vue+ECharts實現(xiàn)中國地圖的繪制以及拖動、縮放和各省份自動輪播高亮顯示,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12vue中v-model、v-bind和v-on三大指令的區(qū)別詳解
v-model和v-bind都是數(shù)據(jù)綁定的方式,下面這篇文章主要給大家介紹了關(guān)于vue中v-model、v-bind和v-on三大指令的區(qū)別,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11Vue3?跨域配置devServer的參數(shù)和設(shè)置方法
這篇文章主要介紹了Vue3?跨域配置devServer的參數(shù)和設(shè)置,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04vue如何實現(xiàn)observer和watcher源碼解析
這篇文章主要為大家詳細介紹了vue如何實現(xiàn)observer和watcher源碼的相關(guān)資料,分析vue的observe實現(xiàn)源碼,聊聊如何一步一步實現(xiàn)$watch,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03基于el-table實現(xiàn)行內(nèi)增刪改功能
這篇文章主要介紹了基于el-table實現(xiàn)行內(nèi)增刪改功能,用過通過操作按鈕點擊刪除或者編輯功能即可實現(xiàn)相應(yīng)的效果,下面小編給大家分享實例代碼感興趣的朋友跟隨小編一起看看吧2024-04-04