久久精品国产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;">

      欧美精品久久一区二区三区| 91精品福利在线一区二区三区 | 午夜免费久久看| 色综合久久中文综合久久牛| 亚洲精品视频免费看| 欧美三级在线视频| 麻豆高清免费国产一区| 欧美精品一区二区在线观看| 国产精品一区二区久久不卡| 中文字幕一区二区日韩精品绯色| 91视频在线观看| 天天色 色综合| 久久女同精品一区二区| 成人动漫一区二区三区| 亚洲成av人在线观看| 精品福利视频一区二区三区| 色天使色偷偷av一区二区| 青青草成人在线观看| 成人免费在线观看入口| 日韩一区和二区| 成人av电影在线网| 看电视剧不卡顿的网站| 日韩一区欧美一区| 精品电影一区二区| 在线精品国精品国产尤物884a| 人人爽香蕉精品| 亚洲麻豆国产自偷在线| 久久久国际精品| 欧美一区二区三区爱爱| 成人免费黄色大片| 久久国产精品无码网站| 亚洲va在线va天堂| 一区二区三区毛片| 国产精品无码永久免费888| 色又黄又爽网站www久久| 午夜电影网一区| 国产精品国产三级国产普通话三级| 日韩一区二区三区av| 成人av电影免费观看| 久久国产视频网| 偷拍自拍另类欧美| 一区二区三区精品| 国产精品国产自产拍高清av王其 | 久久黄色级2电影| 亚洲第一狼人社区| 国产精品九色蝌蚪自拍| 国产婷婷精品av在线| 久久奇米777| 久久九九久久九九| xfplay精品久久| 久久久亚洲欧洲日产国码αv| 欧美大黄免费观看| 日韩欧美高清dvd碟片| 欧美一区二区福利在线| 91精品免费在线| 精品国产乱子伦一区| xf在线a精品一区二区视频网站| 日韩欧美国产综合在线一区二区三区| 欧美日精品一区视频| 欧美日韩国产一级片| 欧美精品久久久久久久多人混战 | 国产一区二区不卡老阿姨| 亚洲图片有声小说| 亚洲一二三四久久| 亚洲第一综合色| 麻豆极品一区二区三区| 久久99精品国产91久久来源| 国产成人8x视频一区二区| 97久久久精品综合88久久| 一本一道久久a久久精品| 欧美亚洲综合在线| 欧美一级二级三级乱码| 久久精品一区二区| 亚洲精品免费在线观看| 亚洲一区二区影院| 麻豆精品在线播放| av电影一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 成人av资源在线| 欧美网站一区二区| 日韩欧美在线123| 国产精品国产三级国产普通话蜜臀| 综合网在线视频| 久久99精品视频| 在线观看视频欧美| 久久综合九色欧美综合狠狠| 亚洲黄色录像片| 九色综合国产一区二区三区| av不卡一区二区三区| 日韩一区二区免费高清| 国产欧美久久久精品影院 | 一区二区免费看| 国产精品自拍毛片| 在线亚洲一区二区| 亚洲国产成人自拍| 美女视频网站久久| 91福利在线播放| 国产亚洲一区二区三区四区| 香港成人在线视频| 91黄色免费看| 国产精品毛片久久久久久| 蜜臀av国产精品久久久久| 欧美在线不卡视频| 亚洲欧美在线aaa| 国产大陆精品国产| 精品久久久久久久人人人人传媒 | 日韩中文字幕亚洲一区二区va在线| 国产一区二区三区观看| 在线不卡a资源高清| 亚洲一二三四在线观看| 972aa.com艺术欧美| 中文字幕av一区二区三区免费看| 麻豆精品一区二区三区| 欧美另类videos死尸| 亚洲国产日日夜夜| 在线免费观看日韩欧美| 综合电影一区二区三区 | 91超碰这里只有精品国产| 亚洲综合丝袜美腿| 在线一区二区三区四区五区| 国产精品国产三级国产专播品爱网 | 极品尤物av久久免费看| 日韩精品一区二区三区老鸭窝| 午夜伦欧美伦电影理论片| 欧美熟乱第一页| 午夜伦理一区二区| 91精品欧美综合在线观看最新| 亚洲成人免费看| 日韩一区二区电影| 韩国v欧美v日本v亚洲v| 国产三级一区二区| 91在线视频免费91| 亚洲一区二区三区美女| 欧美日韩在线观看一区二区 | 欧洲精品在线观看| 亚洲丶国产丶欧美一区二区三区| 色综合天天狠狠| 亚洲高清在线视频| 日韩欧美黄色影院| 国产福利一区二区三区视频 | 精品一区二区三区蜜桃| 久久九九久精品国产免费直播| 国产成人精品综合在线观看| 亚洲欧美在线aaa| 欧美日本韩国一区| 国内精品写真在线观看| 国产精品乱码一区二区三区软件 | 国产精品情趣视频| 91亚洲午夜精品久久久久久| 一区二区三区在线视频播放| 欧美麻豆精品久久久久久| 国产一本一道久久香蕉| ㊣最新国产の精品bt伙计久久| 欧美中文字幕一区| 国内精品嫩模私拍在线| 自拍偷自拍亚洲精品播放| 91官网在线免费观看| 精品亚洲成a人| 一二三区精品视频| 久久伊人蜜桃av一区二区| 成人不卡免费av| 日韩国产精品久久| 最新中文字幕一区二区三区| 日韩一区二区三区电影在线观看 | 精品夜夜嗨av一区二区三区| 综合电影一区二区三区| 日韩精品专区在线影院重磅| 成人激情视频网站| 日本在线不卡视频| 亚洲免费在线观看视频| 26uuu国产在线精品一区二区| 99这里只有久久精品视频| 久久99这里只有精品| 亚洲激情自拍视频| 国产日韩欧美精品电影三级在线| 欧洲av在线精品| 成人福利视频网站| 国产在线精品视频| 老司机免费视频一区二区| 亚洲日本韩国一区| 中文字幕一区在线| 精品国精品自拍自在线| 欧美电影在哪看比较好| 日本精品免费观看高清观看| 成人一区二区三区视频在线观看| 美女www一区二区| 日本一不卡视频| 亚洲国产欧美一区二区三区丁香婷| 国产精品福利电影一区二区三区四区| 精品精品欲导航| 日韩欧美国产精品一区| 欧美一区二区三区在线观看| 欧美日本在线播放| 欧美色图免费看| 欧美日韩国产综合草草| 在线观看区一区二| 欧美系列亚洲系列| 欧美日韩国产经典色站一区二区三区| 在线欧美一区二区| 欧美三级视频在线观看|