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

vue3.0 子組件如何修改父組件傳遞過來的值

 更新時間:2022年04月29日 10:18:42   作者:昵稱老重復  
這篇文章主要介紹了vue3.0 子組件如何修改父組件傳遞過來的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

子組件修改父組件傳遞過來的值

vue 的子組件 不是 不能直接更改父組件的值,需要將props 的值 給到子組件,后再修改,

否則:Unexpected mutation of “props” prop.

vue3提供了一個解決:toRefs:https://v3.cn.vuejs.org/api/refs-api.html#torefs

toRefs 非常有用,這樣消費組件就可以在不丟失響應性的情況下對返回的對象進行解構/展開

使用

const { foo, bar } = reactive({
? ? foo: 1,
? ? bar: 2
})
// 核心解決, 使用reactive接收不會響應時更新,需要使用toRefs
const props = defineProps({
? ? drawerStatus: {
? ? ? ? type: Boolean
? ? }
})
const {drawerStatus} = toRefs(props)

使用toRefs進行解決

<template>
? ? <el-drawer v-model="drawerStatus" title="設置部門助理" :before-close="handleClose">
? ? ? ? <div class="drawer-footer">
? ? ? ? ? ? <el-button>取消</el-button>
? ? ? ? ? ? <el-button type="primary" @click="onSubmit">確定</el-button>
? ? ? ? </div>
? ? </el-drawer>
? ??
</template>
<script setup>
import {reactive, toRefs} from 'vue'
const props = defineProps({
? ? drawerStatus: {
? ? ? ? type: Boolean
? ? }
})
const emits = defineEmits(['upDrawerStatus'])
const {drawerStatus} = toRefs(props)
console.log(33333333, drawerStatus)
// 新增角色數(shù)據(jù)
const formData = reactive({
})
const onSubmit = () => {
? ? handleClose()
}
const handleClose = () => {
? ? console.log('關閉抽屜')
? ? emits('upDrawerStatus', false)
}
</script>

子組件向父組件傳值emit的使用注意事項

子組件的寫法

需要從setup函數(shù)中引出{emit}

<template>
? <div id="center" v-if="isShow">
? ? <h2><slot>my model</slot></h2>
? ? <el-button type="primary" @click="btnclose">傳遞事件</el-button>
? ? <el-button type="primary" @click="btnparents">子組件觸發(fā)父組件的方法</el-button>
? </div>
</template>
<script lang="ts">
import {
? defineComponent,getCurrentInstance
} from "vue";
export default defineComponent({
? props: {
? ? isShow:{
? ? ? type:Boolean,
? ? ? default:true
? ? }
? },
? emits: {
? ? "my-close": null,
? },
? setup(props, {emit}) {
? ? const {proxy}:any=getCurrentInstance()
? ? const btnclose = () => {
? ? ? emit("my-close",'傳遞的數(shù)據(jù)')
? ? }
? ? const btnparents=()=>{
? ? ? console.log(proxy);
? ? ? proxy.$parent.addNum()
? ? }
? ? return {
? ? ? btnclose,
? ? ? proxy,
? ? ? btnparents
? ? };
? },
});
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
? margin: 40px 0 0;
}
ul {
? list-style-type: none;
? padding: 0;
}
li {
? display: inline-block;
? margin: 0 10px;
}
a {
? color: #42b983;
}
</style>

父組件使用

<template>
? <HelloWorld @my-close="myModealHide" :isShow="myModalShow">solt</HelloWorld>
? <el-button @click="myModalBlock">my modal2</el-button>
? <el-button type="primary" @click="toDelit">用戶詳情</el-button>
</template>
<script lang="ts">
import { defineComponent, computed, onMounted, watch,ref,getCurrentInstance,reactive,nextTick ,toRefs} from 'vue'
import {
? useStore,
? mapState,
} from 'vuex'
import {useRoute,useRouter,useLink,UseLinkOptions} from "vue-router"
import { useI18n } from "vue-i18n";
import {data} from "@/utils/TypeState"
import HelloWorld from '@/components/HelloWorld.vue'
export default defineComponent({
? components:{
? ? HelloWorld
? },
? setup(props, context){
? ? console.log('context',context);
? ? const store=useStore()
? ? const {proxy}:any=getCurrentInstance()
? ? const number=ref<string|Number>(store.state.app.age)
? ? const Route=useRoute()
? ? const RouteLink=useLink
? ? const { t } = useI18n();
? ? const languageD=()=>{
? ? ? proxy.$i18n.locale=data.seleLanguage
? ? }
? ? console.log(store.state.app.allMenuList instanceof ?Array);
? ? console.log(proxy);
? // 監(jiān)聽指定基礎類型數(shù)據(jù)
? ? const addNum=()=>{
? ? ? // ?name.value=Number(name.value) +1
? ? ? name.value++
? ? }
? ? watch(name, (now, prev) => {
? ? ? ? ? console.log(now, prev, 'count')
? ? })
? ? // 監(jiān)聽reactive創(chuàng)建的響應式變量,可以直接監(jiān)聽對象,必須使用內聯(lián)函數(shù)
? ? watch(() => data.tableData, (now, prev) => {
? ? ? console.log(now, prev, 'tableData')
? ? })
? ? const myModalShow = ref(false)
? ? const myModealHide=(val:any)=>{
? ? ? myModalShow.value=false
? ? ? console.log(val);
? ? }
? ? const myModalBlock =()=>{
? ? ? myModalShow.value=true
? ? }
? ? const toDelit=():void=>{
? ? ? proxy.$router.push("/userAdminDetils")
? ? }
? ? return {
? ? ? age,
? ? ? number,
? ? ? proxy,
? ? ? store,
? ? ? name,
? ? ? addNum,
? ? ? ...toRefs(data) ,
? ? ? t,
? ? ? languageD,
? ? ? myModealHide,
? ? ? myModalBlock,
? ? ? myModalShow,
? ? ? toDelit
? ? }
? },
? created () {
? ? console.log(this.$route);
? ? console.log(this.store.state.app.age);
? ? // console.log(this.$store);//報錯
? }
})
</script>
<style>
</style>

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

相關文章

  • Vuex的store中的Module用法及說明

    Vuex的store中的Module用法及說明

    這篇文章主要介紹了Vuex的store中的Module用法及說明,具有很好的參考價值,希望對大家有所幫助。
    2023-01-01
  • vue css 引入asstes中的圖片無法顯示的四種解決方法

    vue css 引入asstes中的圖片無法顯示的四種解決方法

    這篇文章主要介紹了vue css 引入asstes中的圖片 無法顯示的幾種解決方案,本文給出了四種解決方法,每種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 一文帶你搞懂Vue中Provide/Inject的使用與高級應用

    一文帶你搞懂Vue中Provide/Inject的使用與高級應用

    這篇文章將詳細介紹如何在?Vue.js?中使用?provide?和?inject?模式,并探討其在實際應用中的高級用法,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • vue中實現(xiàn)點擊變成全屏的多種方法

    vue中實現(xiàn)點擊變成全屏的多種方法

    這篇文章主要介紹了vue中實現(xiàn)點擊變成全屏的多種方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 詳解Vue Cli瀏覽器兼容性實踐

    詳解Vue Cli瀏覽器兼容性實踐

    這篇文章主要介紹了詳解Vue Cli瀏覽器兼容性實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • vue中的watch監(jiān)聽數(shù)據(jù)變化及watch中各屬性的詳解

    vue中的watch監(jiān)聽數(shù)據(jù)變化及watch中各屬性的詳解

    這篇文章主要介紹了vue中的watch監(jiān)聽數(shù)據(jù)變化及watch中的immediate、handler和deep屬性詳解,本文大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-09-09
  • vue2.0+elementui實現(xiàn)一個上門取件時間組件

    vue2.0+elementui實現(xiàn)一個上門取件時間組件

    這篇文章主要給大家介紹了關于vue2.0+elementui實現(xiàn)一個上門取件時間組件的相關資料,用于預約上門服務時間 看到網(wǎng)上有很多亂七八糟的代碼,看著頭疼,于是自己寫了一個簡單的,需要的朋友可以參考下
    2024-02-02
  • vue如何設置描點跳轉到對應頁面

    vue如何設置描點跳轉到對應頁面

    這篇文章主要介紹了vue如何設置描點跳轉到對應頁面問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • vue下載二進制流圖片操作

    vue下載二進制流圖片操作

    這篇文章主要介紹了vue下載二進制流圖片操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue項目分環(huán)境打包的實現(xiàn)步驟

    Vue項目分環(huán)境打包的實現(xiàn)步驟

    這篇文章主要介紹了Vue項目如何分環(huán)境打包,實現(xiàn)方法大概分為六步驟,需要的朋友可以參考下
    2018-04-04

最新評論

仲巴县| 周宁县| 泗阳县| 竹溪县| 永寿县| 吴江市| 黑龙江省| 永吉县| 嘉峪关市| 杭锦旗| 奎屯市| 柘城县| 措勤县| 天全县| 都安| 东至县| 龙川县| 朔州市| 景泰县| 缙云县| 桐乡市| 铁岭市| 翼城县| 浮山县| 峡江县| 土默特左旗| 桃园县| 洛扎县| 利津县| 宁波市| 江都市| 尼玛县| 莱州市| 南华县| 上饶市| 军事| 石棉县| 吴堡县| 铁岭市| 莲花县| 阜南县|