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

props組件 - Vue3新手基礎教程

VUE中好用的組件技術,

組件的分類

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

props是只讀的,vue底層會檢測你對props的修改,如果進行了修改,控制臺會報錯,必須修改,就復制一份到data中,通過data去修改數據。

我們在data里面重新定義一個變量去接收props屬性。這個變量最好不要重名,重名的話,優先獲取props屬性值,優先級props>data

全局組件(component)

全局注冊的組件可以在隨后創建的 app 實例模板中使用,也包括根實例組件樹中的所有子組件的模板中

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

    <script>
        // 創建一個Vue 應用
        const app = Vue.createApp({})

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

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

瀏覽器渲染

局部組件(components)

//對象
const ComponentA = {
  /* ... */
}
const ComponentB = {
  /* ... */
}

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

對于 components 對象中的每個屬性來說,其屬性名就是自定義元素的名字(component-a、component-b),其屬性值就是這個組件的選項對象(ComponentA、ComponentB)。

我們也可以在實例選項中注冊局部組件,這樣組件只能在這個實例中使用:

定義兩個局部組件

    <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>

瀏覽器渲染結果:

Prop

prop 是子組件用來接受父組件傳遞過來的數據的一個自定義屬性。

父組件的數據需要通過 props 把數據傳給子組件,子組件需要顯式地用 props 選項聲明 "prop":

一個組件默認可以擁有任意數量的 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>

瀏覽器渲染結果

動態 Prop

類似于用 v-bind 綁定 HTML 特性到一個表達式,也可以用 v-bind 動態綁定 props 的值到父組件的數據中。每當父組件的數據變化時,該變化也會傳導給子組件:

    <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
  • 默認屬性:default:xx

Prop 驗證

組件可以為 props 指定驗證要求。

為了定制 prop 的驗證方式,你可以為 props 中的值提供一個帶有驗證需求的對象,而不是一個字符串數組。例如:

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

當 prop 驗證失敗的時候,(開發環境構建版本的) Vue 將會產生一個控制臺的警告。

type 可以是下面原生構造器:

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

type 也可以是一個自定義構造器,使用 instanceof 檢測。

例子

    <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: "外星人",    //默認值
                },
                //郵箱
                "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>

瀏覽器渲染

組件接收外部傳來數據的三種方式:

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

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

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

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>

做個按鈕,年齡點擊變99歲

待完善

實戰代碼

    <script src="https://unpkg.com/vue@next"></script>
    <div id="app">
        <h1>{{ msg }}</h1>
        <button @click="add">計數器:{{counte}}</button>
        <site-name></site-name>
    </div>
    <script>
        //父組件
        const appRoot = {
            data() {
                return {
                    msg: "個人基本信息",
                    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 }}

參考連接

給TA贊賞
共{{data.count}}人
人已贊賞
??
Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
?
購物車
優惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    9000px;">

      欧美精品在线观看一区二区| 欧美国产乱子伦 | 亚洲精品视频在线观看网站| 在线精品视频一区二区三四| 国产精品自拍毛片| 亚洲欧洲精品天堂一级| 国产欧美日韩在线| 欧美一区三区四区| 99久久久久免费精品国产| 奇米888四色在线精品| 一区二区三区四区在线免费观看| 欧美国产乱子伦 | 欧美人与禽zozo性伦| av电影在线观看一区| 国产福利一区在线观看| 国产精选一区二区三区| 日韩va欧美va亚洲va久久| 中文字幕亚洲一区二区va在线| 国产精品人妖ts系列视频| 26uuuu精品一区二区| 国产视频911| 久久综合色8888| 国产精品青草久久| 久久奇米777| 国产精品精品国产色婷婷| 国产日产欧美精品一区二区三区| 91精品国产综合久久福利| 91精品国产91久久久久久一区二区 | 久久成人免费网| 日韩电影一二三区| 国产一区二区网址| 韩国一区二区视频| 亚洲高清在线精品| 激情六月婷婷久久| 精品一区中文字幕| 国产乱码精品1区2区3区| 亚洲国产精品人人做人人爽| 久久久久久免费网| 一区二区高清免费观看影视大全| 成人高清在线视频| 日日夜夜精品免费视频| 亚洲欧美另类小说| 免费欧美日韩国产三级电影| 麻豆国产欧美日韩综合精品二区| 亚洲另类春色校园小说| 日韩1区2区日韩1区2区| 中文字幕在线不卡| 丝袜美腿亚洲一区二区图片| 免费一级片91| 91麻豆免费看片| 欧美老肥妇做.爰bbww| 视频一区中文字幕国产| 日韩一区欧美一区| 一区二区三区日韩欧美| 一区二区欧美在线观看| 麻豆成人91精品二区三区| 亚洲午夜免费视频| 韩国欧美国产一区| 91在线免费播放| 欧美理论电影在线| 亚洲人成网站在线| 日日噜噜夜夜狠狠视频欧美人| 国产精品每日更新| 三级在线观看一区二区| 亚洲精品成人少妇| www.成人网.com| 国产精品影视天天线| 丁香天五香天堂综合| 亚洲国产精品一区二区www在线| 国产精品久久久久久久久动漫 | 国产露脸91国语对白| 视频一区二区三区在线| 中文字幕乱码一区二区免费| 视频在线观看国产精品| 国产麻豆午夜三级精品| 日韩欧美一区二区不卡| 国产精品久久久久久妇女6080| 日韩精品五月天| 国产91精品一区二区麻豆网站| 日韩欧美国产一二三区| 精品久久一区二区| 国产精品高清亚洲| 国产成人精品亚洲777人妖| 日本韩国欧美在线| 综合久久国产九一剧情麻豆| 国产精品亚洲专一区二区三区 | 在线亚洲+欧美+日本专区| 亚洲福利电影网| 青青草精品视频| 夜夜爽夜夜爽精品视频| 国产主播一区二区| 欧美精品日日鲁夜夜添| 精品久久久久香蕉网| 亚洲成人先锋电影| 色婷婷综合久久久久中文一区二区| 69堂精品视频| 一区二区三区日韩精品视频| 欧美激情综合在线| 成人精品一区二区三区中文字幕 | 国产69精品久久777的优势| 欧美日韩日日骚| 亚洲精品欧美激情| 国产xxx精品视频大全| 国产精品免费观看视频| 9191成人精品久久| 17c精品麻豆一区二区免费| 成人理论电影网| 欧美极品少妇xxxxⅹ高跟鞋| 欧美性生活影院| 亚洲欧洲av在线| 日韩视频一区二区三区在线播放| 3751色影院一区二区三区| 一区二区三区高清| 欧美岛国在线观看| 欧美羞羞免费网站| 亚洲综合成人在线| 成人黄色电影在线| 亚洲视频在线一区观看| 欧美日韩国产综合一区二区| 久久精品夜色噜噜亚洲aⅴ| 欧美tk丨vk视频| 亚洲一区二区黄色| 欧美午夜一区二区| 麻豆精品精品国产自在97香蕉| 91精品国产欧美一区二区18| 亚洲一级电影视频| 欧美日韩国产系列| 中文字幕欧美国产| 99re成人在线| 亚洲自拍偷拍麻豆| 国产欧美1区2区3区| 成人激情免费视频| 免费观看日韩av| 久久品道一品道久久精品| 成人精品电影在线观看| 亚洲自拍偷拍九九九| 91精品国产aⅴ一区二区| 国产精品影视网| 亚洲精品国产精品乱码不99| 欧美日韩国产小视频| 日日夜夜精品视频免费| 91蝌蚪国产九色| 麻豆精品在线观看| 一区二区三区四区亚洲| 精品三级av在线| 久久精品久久99精品久久| 一区二区三区色| 久久综合九色综合欧美98| 88在线观看91蜜桃国自产| 国产成人亚洲精品青草天美| 艳妇臀荡乳欲伦亚洲一区| 欧美精品高清视频| 夫妻av一区二区| 天堂精品中文字幕在线| 精品成人a区在线观看| 波多野结衣中文一区| 午夜精品久久久久久久蜜桃app| 91黄色激情网站| 亚洲精品高清在线| 激情欧美日韩一区二区| 欧美一a一片一级一片| 久久免费视频一区| 欧美色倩网站大全免费| 久久五月婷婷丁香社区| 国产精品国产馆在线真实露脸 | 日韩精品一区二区三区在线观看 | 懂色av一区二区三区免费观看| 午夜激情一区二区| 国产一区二区三区在线观看精品 | 亚洲福利一区二区三区| 从欧美一区二区三区| 欧美日韩在线三级| 亚州成人在线电影| 日韩欧美国产高清| 亚洲精品一区二区三区精华液| 亚洲少妇最新在线视频| 成人在线视频首页| 亚洲日穴在线视频| 色综合色综合色综合色综合色综合 | 日韩欧美亚洲另类制服综合在线| 亚洲gay无套男同| 中文子幕无线码一区tr| 欧美mv和日韩mv国产网站| 成人影视亚洲图片在线| 亚洲一区二区欧美日韩| 国产日韩欧美综合在线| 2019国产精品| 欧美一区二区大片| 91精品在线麻豆| 日韩一区二区在线观看| 欧美电影影音先锋| 欧美日韩精品系列| 欧美人牲a欧美精品| 欧美一区二区三区视频在线观看| 在线成人免费视频| 91精品国产乱码久久蜜臀| 日韩女优视频免费观看| 亚洲精品在线观| 99久久免费精品高清特色大片| 成人一区二区三区视频在线观看|