欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3如何實(shí)現(xiàn)變量雙向綁定

 更新時(shí)間:2023年11月16日 08:36:55   作者:夢落飛雪  
這篇文章主要介紹了vue3如何實(shí)現(xiàn)變量雙向綁定問題,具有很好的參考價(jià)值,希望對大家有所幫助,

vue3實(shí)現(xiàn)變量雙向綁定

vue2可以通過data、props、computed等鉤子綁定變量,vue3也有相似的方式,這里只說一下vue2中的data方式在vue3中的寫法

①通過reactive綁定

<templete>
    <div>{{value}}</div>
</templete>
<script lang="ts">
import { toRefs, reactive } from "vue";
export default{
    setup(){
        const data = reactive({
            value:''
        })
        return {
            ...toRefs(data)  //toRefs可以解構(gòu)data中屬性,屬性也是雙向綁定的,這樣就不用綁定變量時(shí)嵌套data了
        }
    }
}
</script>

②通過ref綁定

<templete>
    <div>{{data}}</div>
</templete>
<script lang="ts">
import { onMounted, ref } from "vue";
 
export default{
    setup(){
        let data = ref('測試數(shù)據(jù)1')
        onMounted({
            data.value = '測試數(shù)據(jù)2'
        })
        return {
            data
        }
    }
}
</script>

vue3雙向數(shù)據(jù)綁定、setup 語法糖

組件雙向數(shù)據(jù)綁定

父組件修改值,子組件同步。子組件修改,父組件更新。

<template>
	<input type="text" v-module="name" @update:modelValue="onUpdateName($event)">
</template>

<script>
import { ref } from "vue";

export default {
    setup() {
        const name = ref("");
        
        const onUpdateName = (event) => {
            name.value = event;
        };
        
        return { name, onUpdateName };
    }
}
</script>

向子組件傳遞單個(gè)值,通過 props: ["modelValue"] 接收。

子組件改父組件數(shù)據(jù)時(shí),使用 emit("update:modelValue", "新值") 進(jìn)行修改。

向子組件傳遞多個(gè)值,通過 props: ["變量名"] 接收。

子組件改父組件數(shù)據(jù)時(shí),使用 emit("update:變量名", "新值") 進(jìn)行修改。

customRef

創(chuàng)建一個(gè)自定義的 ref 響應(yīng)式數(shù)據(jù),并對其依賴項(xiàng)跟蹤和更新觸發(fā)進(jìn)行顯示控制。

實(shí)現(xiàn)防抖效果

<template>
	<input type="text" v-model="keyword" />
	<h1>{{ keyword }}</h1>
</template>

<script>
import { customRef } from "Vue";

export default {
    setup() {
        // 調(diào)用
        const keyword = myRef("hello", 500);
        
        return { keyword };
    },
};

// 防抖輸入框
function myRef (value, delay) {
    let timer = null;
    return customRef((track, trigger) => {
        return {
            // 讀取數(shù)據(jù)
            get() {
                // 通知vue跟蹤value的變化
                track();
                return value;
            },
            // 更新數(shù)據(jù)
            set(newValue) {
                clearTimeout(timer);
                timer = setTimeout(() => {
                    value = newValue;
                    // 通知vue去重新解析模板
                    trigger();
                }, delay);
            }
        };
    });
};
</script>

setup 語法糖

<script setup></script> 是一種編譯時(shí)語法糖,用于在單文件組件中使用組合式API。

代碼更簡潔,性能更強(qiáng)悍,更好的支持 TS。

<!-- 語法格式 -->
<script setup>
// 引入第三方,定義變量、方法等
</script>

defineProps

defineProps 用于接收父組件傳遞過來的值,可以直接使用無需導(dǎo)入。實(shí)質(zhì)上就是一個(gè) Props 對象。

<!-- 父組件 -->
<template>
	<!-- 1.給子組件傳參 -->
	<Test msg="hello world" />
</template>

<script setup>
import Test from '@/components/Test/Test.vue';
</script>
<!-- 子組件 -->
<template>
	<!-- 3.使用傳遞過來的值 -->
	{{ msg }}
</template>

<script setup>
    // 2.接收傳遞過來的 Props
    defineProps({
        msg: {
            type: String,	// 類型
            required: true,	// 是否必傳
        }
    });
    
    // 也可以使用變量接收,使用時(shí)要寫 props.msg
    // const props = defineProps({ msg: String })
</script>

defineEmits

自定義事件。

<!-- 子組件 -->
<template>
	<!-- 2.點(diǎn)擊觸發(fā) -->
	<button @click="$emit(delete)">點(diǎn)擊事件</button>
</template>

<script setup>
	// 1.自定義事件
    defineEmits(["delete"])
</script>
<!-- 父組件 -->
<template>
	<!-- 3.觸發(fā)父組件方法 -->
	<Test @delete="onDeleteHandler" />
</template>

<script setup>
import Test from '@/components/Test/Test.vue';

// 4.方法邏輯
const onDeleteHandler () => {
	console.log("deleted");
}
</script>

defineExpose

向組件外暴露數(shù)據(jù)。

<!-- 子組件 -->
<template>
	<button @click="$emit(delete)">點(diǎn)擊事件</button>
</template>

<script setup>
import { ref } from "vue";
const count = ref(0);

// 1. 導(dǎo)出暴露數(shù)據(jù)
defineExpose({ count });
</script>
<!-- 父組件 -->
<template>
	<!-- 3.ref接收數(shù)據(jù) -->
	<Test ref="instance" />
	<button @click="log">獲取instance的值</button>
</template>

<script setup>
import Test from '@/components/Test/Test.vue';
import { ref } from "vue";

// 2. 定義變量接收
const instance = ref(null);

const log = () => {
    // 4.點(diǎn)擊按鈕獲取暴露的數(shù)據(jù)
	console.log(instance.value.count);
}
</script>

總結(jié)

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

相關(guān)文章

  • 基于Vue2實(shí)現(xiàn)印章徽章組件

    基于Vue2實(shí)現(xiàn)印章徽章組件

    這篇文章主要介紹了如何基于vue2實(shí)現(xiàn)簡單的印章徽章控件,文中通過示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的朋友們下面就跟隨小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • vue配置文件自動(dòng)生成路由和菜單實(shí)例代碼

    vue配置文件自動(dòng)生成路由和菜單實(shí)例代碼

    因?yàn)椴煌挠脩粲胁煌臋?quán)限,能訪問的頁面是不一樣的,所以我們在寫后臺(tái)管理系統(tǒng)時(shí)就會(huì)遇過這樣的需求:根據(jù)后臺(tái)數(shù)據(jù)動(dòng)態(tài)添加路由和菜單,這篇文章主要給大家介紹了關(guān)于vue配置文件自動(dòng)生成路由和菜單的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 詳解Vue整合axios的實(shí)例代碼

    詳解Vue整合axios的實(shí)例代碼

    本篇文章主要介紹了詳解Vue整合axios的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 在vue3中使用icon圖標(biāo)的三種方案

    在vue3中使用icon圖標(biāo)的三種方案

    這篇文章主要介紹了三種使用icon的方案,分別是element-icon、svg-icon、@iconify/vue,三種方案通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • vue-router vuex-oidc動(dòng)態(tài)路由實(shí)例及功能詳解

    vue-router vuex-oidc動(dòng)態(tài)路由實(shí)例及功能詳解

    這篇文章主要為大家介紹了vue-router vuex-oidc動(dòng)態(tài)路由實(shí)例及功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 前端vue3手動(dòng)設(shè)置滾動(dòng)條位置/自動(dòng)定位詳細(xì)代碼

    前端vue3手動(dòng)設(shè)置滾動(dòng)條位置/自動(dòng)定位詳細(xì)代碼

    這篇文章主要給大家介紹了關(guān)于前端vue3手動(dòng)設(shè)置滾動(dòng)條位置/自動(dòng)定位的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)學(xué)習(xí)或者使用vue3具有一定的參考解決價(jià)值,需要的朋友可以參考下
    2024-05-05
  • Vue數(shù)組中出現(xiàn)__ob__:Observer無法取值問題的解決方法

    Vue數(shù)組中出現(xiàn)__ob__:Observer無法取值問題的解決方法

    __ob__: Observer這個(gè)屬性其實(shí)是Vue監(jiān)控變量產(chǎn)生的,下面這篇文章主要給大家介紹了關(guān)于Vue數(shù)組中出現(xiàn)__ob__:?Observer無法取值問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • vue高德地圖JS API實(shí)現(xiàn)海量點(diǎn)標(biāo)記示例

    vue高德地圖JS API實(shí)現(xiàn)海量點(diǎn)標(biāo)記示例

    本文主要介紹了vue高德地圖JS API實(shí)現(xiàn)海量點(diǎn)標(biāo)記示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Vue?3?進(jìn)階用法之異步組件

    Vue?3?進(jìn)階用法之異步組件

    為了解決加載組件中出現(xiàn)的報(bào)錯(cuò)、超時(shí)、狀態(tài)展示等問題,可以使用?Vue?3?提供的異步組件(Async?Components),它對于加載過程做了更細(xì)致的控制,這篇文章主要介紹了Vue?3?進(jìn)階用法之異步組件,需要的朋友可以參考下
    2024-04-04
  • Vue CLI 3搭建vue+vuex最全分析(推薦)

    Vue CLI 3搭建vue+vuex最全分析(推薦)

    這篇文章主要介紹了Vue CLI 3搭建vue+vuex最全分析(推薦),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09

最新評(píng)論