VUE3 之 多個(gè) v-model 綁定及 v-model 修飾符的使用 - 這個(gè)系列的教程通俗易懂箕昭,適合新手

1. 概述

洛克定律告訴我們:

當(dāng)我們的目標(biāo)很遠(yuǎn)大,遠(yuǎn)到我們都看不到終點(diǎn)時(shí)着憨,放棄幾率就會(huì)很大,就像跑馬拉松比賽务嫡,由于時(shí)間長(zhǎng)甲抖、距離長(zhǎng),很多選手都會(huì)選擇在中途放棄心铃。

其實(shí)有個(gè)好辦法准谚,就是拆分,把大目標(biāo)拆分成很多的小目標(biāo)去扣,這些小目標(biāo)都是能夠看到終點(diǎn)的柱衔,讓自己有一種努力一下就能完成目標(biāo)的感覺(jué),當(dāng)把所有的小目標(biāo)完成后愉棱,大目標(biāo)自然也就完成了唆铐。

言歸正傳,上一節(jié)我們聊了子組件修改父組件數(shù)據(jù)的幾種方式奔滑,今天我們繼續(xù)聊一些更高級(jí)的用法艾岂。

2. 多個(gè) v-model 綁定

2.1 回顧 v-model 方式,修改父組件數(shù)據(jù)的值

    const app = Vue.createApp({
        data() {
            return {
                num : 1
            }
        },
        template:`
            <div>
                <test v-model:num="num" />
            </div>
        `
    });
    app.component("test", {
        props:['num'],
        methods : {
            incrNum() {
                this.$emit('update:num', this.num + 1);
            }
        },
        template:`
            <div @click="incrNum" >{{num}}</div>
        `
    });

這是我們上一節(jié)的最后朋其,使用 v-model 的方式修改父組件傳遞過(guò)來(lái)的 num 的例子王浴。

這里父組件只傳了一個(gè)參數(shù)給子組件,那如果父組件傳遞兩個(gè)或多個(gè)參數(shù)給子組件呢梅猿,同學(xué)們應(yīng)該已經(jīng)知道怎么做了吧氓辣,我們看下面的例子

2.2 多個(gè) v-model 綁定

    const app = Vue.createApp({
        data() {
            return {
                num1 : 1,
                num2 : 1
            }
        },
        template:`
            <div>
                <test v-model:num1="num1" v-model:num2="num2"/>
            </div>
        `
    });

    app.component("test", {
        props:['num1', 'num2'],
        methods : {
            incrNum1() {
                this.$emit('update:num1', this.num1 + 1);
            },
            incrNum2() {
                this.$emit('update:num2', this.num2 + 2)
            }
        },
        template:`
            <div @click="incrNum1" >{{num1}}</div>
            <div @click="incrNum2" >{{num2}}</div>
        `
    });

這個(gè)例子很簡(jiǎn)單,父組件在使用 test 子組件時(shí)使用 <test v-model:num1="num1" v-model:num2="num2"/> 傳遞了兩個(gè)參數(shù) num1袱蚓、num2 給子組件筛婉。

子組件在事件方法中,使用 this.$emit('update:num1', this.num1 + 1); 和 this.$emit('update:num2', this.num2 + 2); 修改 num1、num2 的值爽撒,num1每次點(diǎn)擊加1,num2每次點(diǎn)擊加2响蓉。

image.png

3. v-mode 修飾符

3.1 初識(shí) v-model 修飾符

    const app = Vue.createApp({
        data() {
            return {
                num : 1
            }
        },
        template:`
            <div>
                <test v-model:num.double="num" />
            </div>
        `
    });

    app.component("test", {
        props:{'num': Number, 'numModifiers': {
            default: () => ({})
        }},
        methods : {
            incrNum() {

                let newValue = this.num;
                if(this.numModifiers.double) {
                    
                    newValue = newValue * 2;
                }

                this.$emit('update:num', newValue);
            }
        },
        template:`
            <div @click="incrNum" >{{num}}</div>
        `
    });

主組件在使用 test 子組件時(shí)硕勿,使用 <test v-model:num.double="num" /> 代碼傳參,在這段代碼中有一個(gè)新知識(shí)枫甲,就是 double 修飾符源武,這是我們自定義的一個(gè)修飾符,名稱是隨意取的想幻。

子組件接收父組件參數(shù)時(shí)粱栖,不僅接收了 num,還接收了 numModifiers脏毯。

注意闹究,這里 props 需要以對(duì)象的方式接收參數(shù)。

numModifiers 的命名規(guī)則是 參數(shù)+Modifiers食店,因?yàn)閰?shù)的命名是 num渣淤,所以這里是 numModifiers。

numModifiers 需要指定一個(gè)默認(rèn)值 default: () => ({}) 吉嫩,() => ({}) 意思是默認(rèn)什么都不做价认,如果不指定默認(rèn)值的話,當(dāng)父組件傳參時(shí)自娩,沒(méi)有指定修飾符用踩,則會(huì)報(bào)錯(cuò)

最后在事件方法中使用 if(this.numModifiers.double) 判斷是否使用了 double 修飾符,如果使用了忙迁,num 就乘 2脐彩。

這里只是舉了一個(gè)簡(jiǎn)單的例子,可以根據(jù)指定的修飾符的不同动漾,做很多不同的事情丁屎,例如:字母變大寫(xiě),字母首字母大寫(xiě)旱眯,數(shù)字執(zhí)行某個(gè)特殊計(jì)算等等晨川。

image.png

3.2 多個(gè)參數(shù)包含修飾符

如果多個(gè)參數(shù)包含相同或不同的修飾符,該如何寫(xiě)呢删豺,其實(shí)很簡(jiǎn)單共虑,照貓畫(huà)虎就可以

    const app = Vue.createApp({
        data() {
            return {
                num : 1,
                num2 : 1
            }
        },
        template:`
            <div>
                <test v-model:num.double="num" v-model:num2.triple="num2" />
            </div>
        `
    });

    app.component("test", {
        props:{
            'num': Number, 
            'numModifiers': {
                default: () => ({})
            },
            'num2': Number,
            'num2Modifiers': {
                default: () => ({})
            },
        },
        methods : {
            incrNum() {

                let newValue = this.num;
                if(this.numModifiers.double) {
                    
                    newValue = newValue * 2;
                }

                this.$emit('update:num', newValue);
            },
            incrNum2() {

                let newValue = this.num2;
                if(this.num2Modifiers.triple) {
                    
                    newValue = newValue * 3;
                }

                this.$emit('update:num2', newValue);
            }
        },
        template:`
            <div @click="incrNum" >{{num}}</div>
            <div @click="incrNum2" >{{num2}}</div>
        `
    });

這里我們?cè)黾恿艘粋€(gè) num2 參數(shù),num2 參數(shù)使用了 triple(三倍) 修飾符呀页,這也是個(gè)自定義的修飾符妈拌,名稱是隨意取的。

test 子組件用同樣的方式接收 num2 和 num2Modifiers。

最后在事件方法中使用 if(this.num2Modifiers.triple) 判斷是否使用了 triple 修飾符尘分,如果使用了就把 num2 乘 3猜惋。

image.png

4. 綜述

今天聊了一下 VUE3 的 多個(gè) v-model 綁定及 v-model 修飾符的使用,希望可以對(duì)大家的工作有所幫助培愁,下一節(jié)我們繼續(xù)講組件的相關(guān)知識(shí)著摔,敬請(qǐng)期待

歡迎幫忙點(diǎn)贊、評(píng)論定续、轉(zhuǎn)發(fā)谍咆、加關(guān)注 :)

關(guān)注追風(fēng)人聊Java,每天更新Java干貨私股。

5. 個(gè)人公眾號(hào)

信搜索公眾號(hào):追風(fēng)人聊Java摹察,歡迎大家關(guān)注

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市倡鲸,隨后出現(xiàn)的幾起案子供嚎,更是在濱河造成了極大的恐慌,老刑警劉巖旦签,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件查坪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宁炫,警方通過(guò)查閱死者的電腦和手機(jī)偿曙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)羔巢,“玉大人望忆,你說(shuō)我怎么就攤上這事「透眩” “怎么了启摄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)幽钢。 經(jīng)常有香客問(wèn)我歉备,道長(zhǎng),這世上最難降的妖魔是什么匪燕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任蕾羊,我火速辦了婚禮,結(jié)果婚禮上帽驯,老公的妹妹穿的比我還像新娘龟再。我一直安慰自己,他們只是感情好尼变,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布利凑。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哀澈。 梳的紋絲不亂的頭發(fā)上牌借,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音日丹,去河邊找鬼走哺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哲虾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播择示,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼束凑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了栅盲?” 一聲冷哼從身側(cè)響起汪诉,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谈秫,沒(méi)想到半個(gè)月后扒寄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拟烫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年该编,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硕淑。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡课竣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出置媳,到底是詐尸還是另有隱情于樟,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布拇囊,位于F島的核電站迂曲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寥袭。R本人自食惡果不足惜路捧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纠永。 院中可真熱鬧鬓长,春花似錦、人聲如沸尝江。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至啤覆,卻和暖如春苍日,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗声。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工相恃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笨觅。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓拦耐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親见剩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杀糯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容