久久精品国产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国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    在线观看的日韩av| 在线欧美小视频| 久久米奇亚洲| 在线看片成人| 欧美三级视频| 欧美专区在线观看一区| 在线国产亚洲欧美| 欧美色视频日本高清在线观看| 亚洲女人天堂成人av在线| 国产综合色精品一区二区三区| 猛男gaygay欧美视频| 99亚洲精品| 国产日韩成人精品| 欧美成人午夜免费视在线看片| 一区二区精品在线观看| 国产婷婷精品| 欧美日韩久久精品| 久久久久久久一区二区| 艳妇臀荡乳欲伦亚洲一区| 国产一区二区精品久久91| 欧美激情亚洲另类| 久久精品理论片| 这里只有视频精品| 亚洲国产91精品在线观看| 国产精品免费观看在线| 欧美高清视频| 久久精品夜色噜噜亚洲a∨ | 国产午夜精品全部视频在线播放| 久久尤物电影视频在线观看| 亚洲午夜在线观看视频在线| 亚洲成人在线网| 国产美女精品人人做人人爽| 欧美精品v日韩精品v韩国精品v | 好看不卡的中文字幕| 欧美日韩一区二区在线播放| 久久久www| 欧美一区二区三区视频在线 | 久久久精品视频成人| 亚洲最新在线| 亚洲国产人成综合网站| 国产美女精品免费电影| 欧美色精品天天在线观看视频| 免费观看成人| 久久婷婷国产综合精品青草| 午夜亚洲视频| 亚洲免费人成在线视频观看| 夜夜嗨一区二区| 亚洲区欧美区| 亚洲精品久久久久久一区二区| 国语自产精品视频在线看一大j8| 国产精品女人久久久久久| 欧美日韩国产影片| 欧美美女操人视频| 欧美久久电影| 欧美人与禽猛交乱配视频| 欧美国产视频在线观看| 免费成人性网站| 久久一区二区视频| 六月丁香综合| 老司机午夜精品视频在线观看| 久久国产精品亚洲77777| 欧美影院在线| 久久国内精品自在自线400部| 校园激情久久| 久久九九全国免费精品观看| 久久高清福利视频| 久久香蕉精品| 欧美sm重口味系列视频在线观看| 免费久久99精品国产自| 免费在线播放第一区高清av| 免费亚洲视频| 欧美三级韩国三级日本三斤| 国产精品扒开腿爽爽爽视频| 国产精品萝li| 国色天香一区二区| 亚洲国产成人久久| 日韩一级不卡| 亚洲欧美日韩中文在线制服| 久久成人18免费网站| 美女被久久久| 欧美日韩精品国产| 国产精品网站在线观看| 国内成+人亚洲| 亚洲欧洲一区二区在线播放| 99精品国产高清一区二区| 亚洲网站在线| 久久精品国产第一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美日本亚洲韩国国产| 国产精品久久久久久久午夜片| 国产日韩精品视频一区二区三区| 国产亚洲制服色| 亚洲精品乱码久久久久久| 亚洲性图久久| 久久人人97超碰国产公开结果| 欧美韩日高清| 国产精品天天看| 永久久久久久| 亚洲一区二区三区免费观看| 久久久精品网| 欧美日韩一区二区视频在线| 国产一区在线播放| 亚洲精品在线观| 欧美在线不卡| 欧美日韩精品久久| 樱花yy私人影院亚洲| 亚洲在线视频网站| 欧美成人午夜激情| 国产欧美精品一区aⅴ影院| 亚洲激情专区| 久久精品99无色码中文字幕| 欧美精品一区二区三区在线看午夜| 国产精品久久久久久av福利软件 | 最新69国产成人精品视频免费| 亚洲素人在线| 欧美成人午夜免费视在线看片| 国产精品一级| 日韩一级视频免费观看在线| 久久久久中文| 国产精品综合视频| 一区二区三区 在线观看视| 久久久亚洲高清| 国产美女精品视频| 99精品欧美一区二区三区综合在线| 欧美在线精品一区| 国产精品护士白丝一区av| 亚洲国产欧美精品| 欧美在线视频在线播放完整版免费观看 | 加勒比av一区二区| 亚洲欧美日韩区| 亚洲欧洲精品一区二区三区波多野1战4 | 国产精品美女| 欧美电影美腿模特1979在线看| 国产美女精品人人做人人爽| 亚洲精品视频在线| 男女精品视频| 在线观看视频免费一区二区三区| 欧美一区不卡| 国产精品一二三四区| 一本色道久久综合狠狠躁的推荐| 欧美成人福利视频| 亚洲第一综合天堂另类专| 久久久亚洲影院你懂的| 国产一区二区三区日韩| 欧美综合国产精品久久丁香| 国产美女精品视频免费观看| 亚洲网站在线观看| 国产精品毛片在线看| 亚洲一区二区三区激情| 欧美日韩在线免费观看| 亚洲午夜av电影| 国产精品久久77777| 亚洲小说欧美另类婷婷| 国产精品高清网站| 亚洲男女自偷自拍| 国产麻豆精品视频| 久久精品国产精品亚洲| 国内精品**久久毛片app| 久久精品亚洲| 91久久国产综合久久91精品网站| 欧美成人免费全部观看天天性色| 亚洲精品激情| 欧美日韩精品一区二区三区四区 | 久久精品视频在线| 亚洲第一级黄色片| 欧美日韩成人综合在线一区二区| aa国产精品| 国产精品素人视频| 国产日韩欧美中文在线播放| 欧美激情第五页| 欧美人成网站| 欧美日韩免费网站| 国产精品国产亚洲精品看不卡15| 欧美午夜精品一区二区三区| 欧美视频你懂的| 国产精品一区二区在线观看网站| 国产精品视频1区| 国产午夜精品视频| 亚洲成色777777女色窝| 亚洲精华国产欧美| 中文日韩在线视频| 欧美一区二区在线| 久久一本综合频道| 欧美日韩理论| 国产亚洲一区在线| 欧美 日韩 国产在线| 亚洲日本aⅴ片在线观看香蕉| 国产精品jizz在线观看美国 | 国产欧美日韩另类一区| 久久亚洲免费| 亚洲在线视频免费观看| 在线精品在线| 国产精品自拍网站| 欧美大尺度在线观看| 午夜精品久久久久久久久久久久久 | 亚洲图片欧美一区| 狠狠色丁香婷婷综合| 欧美视频一区| 裸体丰满少妇做受久久99精品 | 韩日欧美一区|