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

Vue3  defineExpose要在方法聲明定義以后使用的教程

 更新時間:2023年02月18日 10:11:46   作者:feixianxing  
這篇文章主要介紹了Vue3  defineExpose要在方法聲明定義以后使用的教程,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

defineExpose要在變量和方法聲明定義之后再使用,否則瀏覽器的控制臺會輸出很多警告,并且最終將該頁面卡死。

[Vue3] defineExpose要在方法聲明定義以后使用

Vue3中的setup默認是封閉的,如果要從子組件向父組件暴露屬性和方法,需要用到defineExpose.

defineProps, defineEmits一樣,這三個函數(shù)都是內(nèi)置的,不需要import.

不過defineProps, defineEmits都會返回一個實例,而defineExpose是無返回值的.

const props = defineProps({})
const emit = defineEmits([])
defineExpose({})

defineExpose的使用

子組件Child.vue

<template>
	{{ name }}
</template>

<script setup>
import { ref } from 'vue'

const name = ref("Nicholas.")
const sayName = ()=>{
    console.log("my name is "+name.value)
}

defineExpose({
	name,
	sayName
});
</script>

父組件Father.vue

<template>
	<Child ref="child"></Child>
</template>

<script setup>
import { ref, onMounted } from 'vue'
const child = ref(null)
onMounted(()=>{
    console.log(child.value.name)	// "Nicholas"
    child.value.sayName()			// "my name is Nicholas"
})
</script>

總結(jié)

向外暴露的時候變量會自動解包,比如上面子組件的name:ref<String>暴露到父組件的時候自動變成了name:String.

注:defineExpose一定要在變量和方法聲明定義之后再使用。

不知道以后會不會有修改,不過在2023/02/17,如果defineExpose寫在變量和函數(shù)前面,那么瀏覽器的控制臺會輸出很多警告,并且最終將該頁面卡死。

擴展:vue3 defineExpose

vue3使用 setup 語法糖后如何在父組件用ref調(diào)用子組件的方法

什么是setup語法糖

  • 更少的樣板內(nèi)容,更簡潔的代碼。
  • 能夠使用純 Typescript 聲明 props 和拋出事件。
  • 更好的運行時性能 (其模板會被編譯成與其同一作用域的渲染函數(shù),沒有任何的中間代理)。
//要使用這個語法,需要將 setup attribute 添加到 <script> 代碼塊上:
<script setup>
console.log('hello script setup')
//里面的代碼會被編譯成組件 setup() 函數(shù)的內(nèi)容。這意味著與普通的 <script> 只在組件被首次引入的時候執(zhí)行一次不同,<script setup> 中的代碼會在每次組件實例被創(chuàng)建的時候執(zhí)行。
</script>

當我們的組件使用這種語法時,是不可以用setup()這種語法的寫法獲取子組件的數(shù)據(jù)或方法
為了在 script setup 組件中明確要暴露出去的屬性,使用 defineExpose 編譯器宏:

<script setup>
import { ref } from 'vue'

const a = 1
const b = ref(2)

defineExpose({
  a,
  b
})
//當父組件通過模板 ref 的方式獲取到當前組件的實例,獲取到的實例會像這樣 { a: number, b: number } (ref 會和在普通實例中一樣被自動解包)

</script>

下面是vue3 使用setup()后 父組件獲取子組件的方法

1、父組件

template中

<Table ref="eleTable" @handle="handleFun"></Table>
import {  ref  } from 'vue'

2、子組件

setup() { 
   //ref方法
    const eleTable = ref()  //eleTable是頁面ref后面對應(yīng)的名字
    const clickSon = () => {
      eleTable.value.changeShowText() //調(diào)用子組件的方法
      let arr = eleTable.value.tableData //獲取子組件 setup 里面定義的變量
    }
}

使用語法糖之后的寫法

父組件

<FastreplySettingTable
              ref="FastreplySettingTableRef"
              v-if="sysStore.msgList"
              :groupType="Math.abs(state.currentTab - 1)"
              :currentTab="state.currentTab"
            ></FastreplySettingTable>


<script>
   const FastreplySettingTableRef = ref();
   
   //該方法是一個點擊事件
   function sendEvent(action) {
     if (FastreplySettingTableRef) {
     //拿到FastreplySettingTableRef組件里的dispatchEvent方法 并且穿一些參數(shù)
    FastreplySettingTableRef.value.dispatchEvent({ action, groupType: Math.abs(state.currentTab - 1) })
  }
}
</script>

子組件

import {
  getCurrentInstance,
  onMounted,
  reactive,
  onBeforeUnmount,
  defineProps,
  defineEmits,
  computed,
  onBeforeMount,
  onUnmounted,
  watch,
  ref,
  //這里必須引入
  defineExpose
} from "vue";
// 希望被父組件調(diào)用到的方法
//這個方法必須寫在defineExpose 上面才會生效
const dispatchEvent = ({ action, groupType }) => {
  switch (action) {
    case 'tabClick': {
      state.searchKeyword = '',
        state.activeGroup = 'all'

    }; break;
    case 'addfastMsg': {
      //上報
      openMask('addfastMsg');
      // state.DialogTitle = state.groupType ? "快捷消息管理-添加團隊內(nèi)容" : "快捷消息管理-添加個人內(nèi)容"
      // spiderReport.paq(props.groupType ? "快捷消息管理-添加團隊內(nèi)容" : "快捷消息管理-添加個人內(nèi)容");
    }; break;
    default: {
      // state.[action](groupType);
    }
  }
}
defineExpose({
  dispatchEvent
})

到此這篇關(guān)于Vue3 defineExpose要在方法聲明定義以后使用的教程的文章就介紹到這了,更多相關(guān)Vue3 defineExpose內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你深入了解V-model實現(xiàn)數(shù)據(jù)雙向綁定

    一文帶你深入了解V-model實現(xiàn)數(shù)據(jù)雙向綁定

    這篇文章主要為大家詳細介紹了V-model實現(xiàn)數(shù)據(jù)雙向綁定的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • vscode中使用vue的一些插件總結(jié)(方便開發(fā))

    vscode中使用vue的一些插件總結(jié)(方便開發(fā))

    對于很多使用vscode編寫vue項目的新手同學來說,可能不知道使用什么插件,下面這篇文章主要給大家介紹了關(guān)于vscode中使用vue的一些插件,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • vue中添加音頻和視頻的示例詳解

    vue中添加音頻和視頻的示例詳解

    這篇文章主要為大家詳細介紹了如何vue中添加音頻和視頻的相關(guān)知識,文中的示例代碼簡潔易懂,具有一定的學習價值,感興趣的小伙伴可以了解下
    2023-08-08
  • 前端vue如何通過URL訪問存儲在服務(wù)器或磁盤的圖片

    前端vue如何通過URL訪問存儲在服務(wù)器或磁盤的圖片

    在Vue中,通常需要將圖片存儲在服務(wù)器端,并通過url地址來訪問,下面這篇文章主要給大家介紹了前端vue如何通過URL訪問存儲在服務(wù)器或磁盤的圖片的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • vue如何封裝Axios的get、post請求

    vue如何封裝Axios的get、post請求

    這篇文章主要介紹了vue如何封裝Axios的get、post請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 深入了解vue2與vue3的生命周期對比

    深入了解vue2與vue3的生命周期對比

    這篇文章主要為大家介紹了vue2與vue3的生命周期對比,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • vue和element上傳圖片以及進行拖拽圖片排序問題

    vue和element上傳圖片以及進行拖拽圖片排序問題

    這篇文章主要介紹了vue和element上傳圖片以及進行拖拽圖片排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue首評加載速度及白屏時間優(yōu)化詳解

    Vue首評加載速度及白屏時間優(yōu)化詳解

    這篇文章主要介紹了vue項目優(yōu)化首評加載速度,以及白屏時間過久的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • Vue Router中獲取路由傳遞過來的參數(shù)(方法詳解)

    Vue Router中獲取路由傳遞過來的參數(shù)(方法詳解)

    在VueRouter中,可以通過動態(tài)路由匹配和查詢參數(shù)`query`來傳遞參數(shù),并將路由參數(shù)或查詢參數(shù)作為組件的`props`傳遞,動態(tài)路由匹配使用`route.params`訪問參數(shù),查詢參數(shù)使用`route.query`訪問,本文給大家介紹Vue Router中獲取路由傳遞過來的參數(shù),感興趣的朋友一起看看吧
    2025-02-02
  • 詳解Vue中生命周期鉤子函數(shù)的使用示例

    詳解Vue中生命周期鉤子函數(shù)的使用示例

    這篇文章主要為大家詳細介紹了Vue中常見的生命周期鉤子函數(shù)的使用,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11

最新評論

腾冲县| 广丰县| 博乐市| 金阳县| 电白县| 南平市| 湘西| 保定市| 辉县市| 文山县| 乌兰浩特市| 陕西省| 太保市| 漠河县| 多伦县| 灵山县| 响水县| 白沙| 喀什市| 同心县| 宜兰县| 彝良县| 汤阴县| 伊川县| 苏尼特左旗| 乌拉特前旗| 新昌县| 阿合奇县| 甘肃省| 会东县| 永城市| 吉木乃县| 化州市| 定州市| 苍梧县| 柳林县| 云阳县| 宣城市| 九寨沟县| 东平县| 凤翔县|