久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

props組件 – Vue3新手基礎(chǔ)教程

VUE中好用的組件技術(shù),

組件的分類

  1. 全局組件 : 可以聲明一次在任何地方使用(一般寫插件的時(shí)候全局使用的多一點(diǎn))
  2. 局部組件: 必須告訴這個(gè)組件屬于誰(shuí)(一般用局部比較好)

props是只讀的,vue底層會(huì)檢測(cè)你對(duì)props的修改,如果進(jìn)行了修改,控制臺(tái)會(huì)報(bào)錯(cuò),必須修改,就復(fù)制一份到data中,通過(guò)data去修改數(shù)據(jù)。

我們?cè)赿ata里面重新定義一個(gè)變量去接收props屬性。這個(gè)變量最好不要重名,重名的話,優(yōu)先獲取props屬性值,優(yōu)先級(jí)props>data

全局組件(component)

全局注冊(cè)的組件可以在隨后創(chuàng)建的 app 實(shí)例模板中使用,也包括根實(shí)例組件樹(shù)中的所有子組件的模板中

    <script src="https://unpkg.com/vue@next"></script>
    <div id="app">
        <runoob></runoob>
        <!-- 組件間數(shù)據(jù)相互獨(dú)立 -->
        <button-counter></button-counter>
        <button-counter></button-counter>
        <button-counter></button-counter>
    </div>

    <script>
        // 創(chuàng)建一個(gè)Vue 應(yīng)用
        const app = Vue.createApp({})

        // 定義一個(gè)名為 runoob的新全局組件
        app.component('runoob', {
            template: '<h1>自定義組件!</h1>'
        })
        // 定義一個(gè)名為 button-counter的新全局組件
        app.component('button-counter', {
            data() {
                return {
                    count: 0
                }
            },
            template: `
            <button @click="count++">
            點(diǎn)了 {{ count }} 次!
            </button>`
        })

        app.component('runoob', {
            template: '<h1>自定義組件!</h1>'
        })
        app.mount('#app')
    </script>

瀏覽器渲染

局部組件(components)

//對(duì)象
const ComponentA = {
  /* ... */
}
const ComponentB = {
  /* ... */
}

//使用
const app = Vue.createApp({
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  }
})

對(duì)于 components 對(duì)象中的每個(gè)屬性來(lái)說(shuō),其屬性名就是自定義元素的名字(component-a、component-b),其屬性值就是這個(gè)組件的選項(xiàng)對(duì)象(ComponentA、ComponentB)。

我們也可以在實(shí)例選項(xiàng)中注冊(cè)局部組件,這樣組件只能在這個(gè)實(shí)例中使用:

定義兩個(gè)局部組件

    <script src="https://unpkg.com/vue@next"></script>
    <div id="app">
        <runoob-a></runoob-a>
        <runoob-b></runoob-b>
    </div>
    <script>

        var runoobA = {
            template: '<h1>自定義組件A!</h1>'
        }

        var runoobB = {
            template: '<h1>自定義組件B!</h1>'
        }

        const app = Vue.createApp({
            components: {
                'runoob-a': runoobA,
                'runoob-b': runoobB,
            }
        })
        app.mount('#app')
    </script>

瀏覽器渲染結(jié)果:

Prop

prop 是子組件用來(lái)接受父組件傳遞過(guò)來(lái)的數(shù)據(jù)的一個(gè)自定義屬性。

父組件的數(shù)據(jù)需要通過(guò) props 把數(shù)據(jù)傳給子組件,子組件需要顯式地用 props 選項(xiàng)聲明 “prop”:

一個(gè)組件默認(rèn)可以擁有任意數(shù)量的 prop,任何值都可以傳遞給任何 prop。

    <script src="https://unpkg.com/vue@next"></script>
    <div id="app">
        <site-name name="Muze" mail="1@1.com"></site-name>
    </div>

    <script>
        const app = Vue.createApp({})

        app.component('site-name', {
            props: ['name', 'mail'],
            template: `<h2>昵稱:{{ name }}<br />郵箱:{{ mail }}</h2>`
        })

        app.mount('#app')
    </script>

瀏覽器渲染結(jié)果

動(dòng)態(tài) Prop

類似于用 v-bind 綁定 HTML 特性到一個(gè)表達(dá)式,也可以用 v-bind 動(dòng)態(tài)綁定 props 的值到父組件的數(shù)據(jù)中。每當(dāng)父組件的數(shù)據(jù)變化時(shí),該變化也會(huì)傳導(dǎo)給子組件:

    <div id="app">
        <site-info v-for="site in sites" :id="site.id" :title="site.title"></site-info>
    </div>

    <script>
        const Site = {
            data() {
                return {
                    sites: [
                        { id: 1, title: 'Google' },
                        { id: 2, title: 'Runoob' },
                        { id: 3, title: 'Taobao' }
                    ]
                }
            }
        }

        const app = Vue.createApp(Site)

        app.component('site-info', {
            props: ['id', 'title'],
            template: `<h4>{{ id }} - {{ title }}</h4>`
        })

        app.mount('#app')
    </script>

瀏覽器演示效果

限制

  • 類型屬性:type:xx
  • 必傳屬性:required:true
  • 默認(rèn)屬性:default:xx

Prop 驗(yàn)證

組件可以為 props 指定驗(yàn)證要求。

為了定制 prop 的驗(yàn)證方式,你可以為 props 中的值提供一個(gè)帶有驗(yàn)證需求的對(duì)象,而不是一個(gè)字符串?dāng)?shù)組。例如:

Vue.component('my-component', {
  props: {
    // 基礎(chǔ)的類型檢查 (`null` 和 `undefined` 會(huì)通過(guò)任何類型驗(yàn)證)
    propA: Number,
    // 多個(gè)可能的類型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 帶有默認(rèn)值的數(shù)字
    propD: {
      type: Number,
      default: 100
    },
    // 帶有默認(rèn)值的對(duì)象
    propE: {
      type: Object,
      // 對(duì)象或數(shù)組默認(rèn)值必須從一個(gè)工廠函數(shù)獲取
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定義驗(yàn)證函數(shù)
    propF: {
      validator: function (value) {
        // 這個(gè)值必須匹配下列字符串中的一個(gè)
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  }
})

當(dāng) prop 驗(yàn)證失敗的時(shí)候,(開(kāi)發(fā)環(huán)境構(gòu)建版本的) Vue 將會(huì)產(chǎn)生一個(gè)控制臺(tái)的警告。

type 可以是下面原生構(gòu)造器:

  • String
  • Number
  • Boolean
  • Array
  • Object
  • Date
  • Function
  • Symbol

type 也可以是一個(gè)自定義構(gòu)造器,使用 instanceof 檢測(cè)。

例子

    <script src="https://unpkg.com/vue@next"></script>
    <div id="app">
        <site-name name="Muze" mail="1@1.com" age="18"></site-name>
    </div>
    <script>
        const app = Vue.createApp({})
        app.component('site-name', {
            props: {
                //昵稱
                "name": {
                    type: String,        //類型屬性
                    required: true,      //必傳屬性
                    default: "外星人",    //默認(rèn)值
                },
                //郵箱
                "mail": {
                    type: String,
                    required: false,
                    default: "myemail@email.com",
                },
                //年齡
                "age": {
                    type: Number,
                    required: true,
                    default: "未知",
                }
            },
            template: `<h2>
                昵稱:{{ name }}<br />
                郵箱:{{ mail }}<br />
                年齡:{{ age }}</h2>`
        })
        app.mount('#app')
    </script>

瀏覽器渲染

組件接收外部傳來(lái)數(shù)據(jù)的三種方式:

(1)只接收:props: [‘name’,’age’,’sex’]

(2)接收并限制類型:props: { “name”:Number }

(3)限制類型、限制必要性指定默認(rèn)值:

props:{
    "name":{
        type:String,
        required:true
    },
    "age":{
        type:Number,
        default:18
    },
    "sex":{
        type:String,
        default:'男'
    },
},

年齡+1歲

<site-name name="Muze" mail="1@1.com" :age="18"></site-name>

年齡:{{ age+1 }}</h2>

做個(gè)按鈕,年齡點(diǎn)擊變99歲

待完善

實(shí)戰(zhàn)代碼

    <script src="https://unpkg.com/vue@next"></script>
    <div id="app">
        <h1>{{ msg }}</h1>
        <button @click="add">計(jì)數(shù)器:{{counte}}</button>
        <site-name></site-name>
    </div>
    <script>
        //父組件
        const appRoot = {
            data() {
                return {
                    msg: "個(gè)人基本信息",
                    counte: 1,
                }
            },
            methods: {
                add() {
                    this.counte += 1;
                }

            },
        }

        app = Vue.createApp(appRoot);

        //子組件
        app.component('site-name', {
            props: {
                //年齡
                "age": {
                    type: Number,
                    required: true,
                    default: "18",
                }
            },

            template: `<h2>年齡:{{ age }}</h2>`,
        })

        app.mount('#app');

    </script>

瀏覽器渲染

{{ msg }}

參考連接

??
Npcink上的部份代碼及教程來(lái)源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
無(wú)意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
?
購(gòu)物車
優(yōu)惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    9000px;">

      亚洲 欧美 日韩在线| 国产一线在线观看| www视频在线| 国产精品免费在线视频| 国产免费一区二区三区最新不卡 | 国产一级在线视频| 黄色一级片免费在线观看| 精品人妻午夜一区二区三区四区| 精品无码一区二区三区蜜臀 | 天堂成人在线观看| 在线播放精品视频| 一级黄色大片视频| 丰满少妇被猛烈进入一区二区| 国产日韩欧美视频在线观看| 久久精品国产亚洲av麻豆| 女同性αv亚洲女同志| 色屁屁草草影院ccyy.com| 伊人精品视频在线观看| 亚洲性图一区二区| 国产精品色综合| 久久久99精品| 深爱五月激情五月| 亚洲精品成人在线播放| 朝桐光av在线| 久久久久久久福利| 天天爱天天做天天爽| 亚洲国产一二三区| 成 人 黄 色 片 在线播放| 精品国产乱码久久久久夜深人妻| 欧美一级性视频| 中文字幕 日韩 欧美| av av片在线看| 黄色av电影网站| 日日干夜夜操s8| 亚洲精品无码一区二区| 国产成年人免费视频| 久久久久99精品成人| 糖心vlog精品一区二区| 亚洲一区中文字幕永久在线| 国产精品久久久久久在线观看| 久久久久久激情| 午夜在线观看av| 99自拍视频在线| 久久精品视频2| 五月婷婷六月合| 99久久精品日本一区二区免费| 国产字幕在线观看| 天天视频天天爽| av综合在线观看| 久久久国产精品黄毛片| 午夜视频1000| 成熟人妻av无码专区| 久久视频免费看| 中文字幕免费看| 国产九九在线视频| 日韩黄色片网站| 亚洲一区二区三区黄色| 精品国产乱码久久久久夜深人妻 | 中文字幕无人区二| 国产精品久久久久久久妇 | 亚洲一区二区视频在线播放| 国产喷水在线观看| 少妇激情一区二区三区| 99热这里只有精品9| 久久一级免费视频| 中文字幕一区三区久久女搜查官| 国产乱叫456| 天堂av资源网| 成人一区二区三区仙踪林| 日本熟女一区二区| a级大片免费看| 秋霞午夜鲁丝一区二区| 2021亚洲天堂| 妺妺窝人体色www在线观看| 亚洲精品乱码久久久久久不卡 | 午夜激情小视频| 国产成人精品av在线观| 日韩高清精品免费观看| a片在线免费观看| 日本午夜在线观看| 超碰在线观看99| 色哟哟一一国产精品| 成年人小视频在线观看| 日韩有码第一页| 国产高清不卡视频| 婷婷伊人五月天| 国产精品一区二区入口九绯色 | 国产精品999久久久| 天天爽夜夜爽一区二区三区| 国产传媒免费在线观看| 天天操天天干天天操| 亚洲美女福利视频| 人妻互换一区二区激情偷拍| 国产v片在线观看| 欧美熟女一区二区| av片免费播放| 日韩高清免费av| 国产成人三级在线播放| 天天射天天干天天| 国模人体一区二区| 中文字幕有码av| 欧美88888| 超碰福利在线观看| 五月婷婷丁香综合网| 好吊色视频一区二区| 最新国产中文字幕| 欧美a∨亚洲欧美亚洲| www.com国产| 五月天婷婷在线观看视频| 国精品无码人妻一区二区三区| 亚洲免费成人在线| 青青草免费av| 国产美女免费无遮挡| 最新在线黄色网址| 潘金莲一级淫片aaaaaaa| 国产不卡一二三| 中文字幕成人动漫| 欧美视频一二区| 国产精品综合激情| 亚洲国产综合视频| 日韩激情小视频| 国产亚洲精品久久久久久豆腐| 亚洲欧洲成人在线| 日日噜噜噜噜久久久精品毛片| 国精品人妻无码一区二区三区喝尿| 亚洲天堂视频网站| 五月婷婷六月丁香激情| 久久影院一区二区| 国产精品久久久久久在线| 亚洲人成人无码网www国产| 三上悠亚av一区二区三区| 精品国产欧美日韩不卡在线观看| 91国产丝袜播放在线| 性色国产成人久久久精品| 免费看污黄网站在线观看| 国产精品福利电影| 亚洲中文字幕无码av| 无码任你躁久久久久久老妇| 久久久久久久极品| 国产精品久久久久久在线观看| 亚洲视频在线a| 五月婷婷深爱五月| 欧美日韩在线国产| 国模私拍一区二区| 懂色av成人一区二区三区| 亚洲精品91在线| 婷婷社区五月天| 欧美一区二区免费在线观看| 国产又粗又猛又爽视频| www.国产一区二区| 亚洲毛片亚洲毛片亚洲毛片 | 中文字幕天堂网| 神马久久久久久久| 免费看特级毛片| 国内自拍视频在线播放| 国产av一区二区三区精品| 一本一本久久a久久| 中文字幕 日韩有码| 天天操天天摸天天爽| 欧美亚韩一区二区三区| 久久久久国产免费| 国产一级aa大片毛片| 国产a免费视频| 91视频在线视频| 亚洲欧美综合一区二区| 中文字幕观看在线| 午夜成人免费影院| 日韩一区二区三区四区视频| 欧美黑人一级片| 久久久老熟女一区二区三区91| 国产又粗又长又爽又黄的视频| 国产黄色av片| 非洲一级黄色片| www.中文字幕av| 999精品视频在线| 一本色道久久综合精品婷婷| 亚洲精品久久久久久国| 中文字幕 亚洲视频| 印度午夜性春猛xxx交| 午夜免费精品视频| 午夜激情在线观看视频| 天天天天天天天天操| 天堂在线视频免费| 手机免费看av| 手机免费观看av| 婷婷激情四射网| 性刺激的欧美三级视频| 五月激情四射婷婷| 五月婷婷激情在线| 亚州精品国产精品乱码不99按摩| 无码国产69精品久久久久网站| 四虎国产精品免费| 天天舔天天干天天操| 午夜福利123| 一区二区视频观看| 一区二区三区四区毛片| 一区二区三区网址| 中文字幕日韩免费| 亚洲免费成人在线| 亚洲无码久久久久|