成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

一小時入門vue組件(建議收藏)

本篇文章給大家帶來了vue組件的相關知識,其中包括了怎樣實例化多個vue對象、全局組件以及局部組件還有父像子傳值等等,希望對大家有幫助。

一小時入門vue組件(建議收藏)

初識組件應用

實例化多個vue對象

用new創建多個vue對象并命名,可以通過變量相互訪問
例子:對象2修改對象1的name變量

<!-- 第一個根元素 --> <div id="vue-app-one">這里是:{{name}}</div>   <!-- 第二個根元素 --> <div id="vue-app-two">     <p>這里是:{{name}}</p><br>     <button @click="changeName">change-one-name</button>     <!-- 點擊后修改vue-app-one的name值--> </div>
 // 第一個vue對象var one = new Vue({     el:"#vue-app-one",     data:{         "name":"ccy1"     }})   // 第二個vue對象var two = new Vue({     el:"#vue-app-two",     data:{         "name":"ccy2"     },     methods:{         // 修改vue-app-one的name為'ccy333'         changeName:function(){             one.name = 'ccy333'         }     }})

效果:點擊后修改”ccy1“為”ccy333“

一小時入門vue組件(建議收藏)

全局組件

定義與使用

  • 定義全局組件,需給組件一個名字,調用時,將組件名當作標簽名使用;相當于自定義標簽,該標簽下可以包含很多子html標簽;
  • 這些子html標簽定義在組件的template屬性中,每次調用該組件,都渲染template里的標簽
  • template里必須只有一個根元素
  • 在組件中,data是函數,將數據return回去
  • 依然可以用this來調用data中定義的數據

例子:

定義組件:

① 定義一個組件,命名為my-component
② 其中包含數據:name和方法:changeName
③ 渲染出的html效果有一個p標簽,包含一個按鈕,點擊按鈕時,修改name
④ 命名規范:camelCase (駝峰命名法) 與kebab-case (短橫線分隔命名)

  • 當寫成標簽時,遇到有大寫字母的命名,需要改成小寫并用橫桿鏈接前后兩個部分,如定義組件時命名為myComponent,寫成標簽時應寫成<my-component>;
  • 組件定義時也可以用橫桿法命名;
  • 如果定義時用myComponent,標簽用<my-component>是OK的,系統自動識別
// 自定義的全局組件my-component// template中只有一個根元素p標簽,里面包含一個button按鈕Vue.component('my-component',{     template:`<p>         我的名字是:{{name}}         <button @click='changeName()'>btn</button>         </p>`,     data(){         return {             name:'ccy'         }     },     methods:{         changeName:function(){             this.name = '安之'         }     }})// vue對象1new Vue({     el:"#vue-app-one",})// vue對象2new Vue({     el:"#vue-app-two",})

使用組件:

① 在vue對象對應的根元素(el指定標簽)下使用
② 由于定義的是全局組件,所以可以在任意的vue對象下使用
③ 組件可復用,在一個vue對象下可以使用多次,且組件間互相獨立

<p id="vue-app-one">     <my-component></my-component>     <my-component></my-component></p> <p id="vue-app-two">     <my-component></my-component></p>

效果:
一小時入門vue組件(建議收藏)

data是一個函數

在vue對象中,data屬性值是一個對象,比如這樣的:

一小時入門vue組件(建議收藏)
但是在全局組件中,同一份data可能被多個vue對象使用,每個對象不單獨維護一份data時,如果某一個vue對象修改了data中的一個變量,其他vue對象獲取data時就會被影響;

如果用上面的例子做案例,若組件中的data是對象(引用),其他地方均不改變,兩個vue對象便共享同一個name變量;當我通過其中一個vue對象改變name數據時(即點擊任一個btn按鈕),另一個對象獲得的name也發生了改變(其他按鈕處的’ccy’也都被改成了’安之’)

因此,為保證數據的獨立性,即每個實例可以維護一份被返回對象的獨立的拷貝,data為每個實例都return一份新創建的數據,不同的vue對象獲取的data均互不影響

在vscode中不允許組件中的data是對象,會報錯:

[Vue warn]: The “data” option should be a function that returns a per-instance value in component definitions.

局部組件

  • 局部組件注冊在某個vue對象中,
  • 只有注冊過該局部組件的vue對象才能使用這個局部組件

例子:
局部組件定義

// template僅一個根元素:ulvar msgComponent = { 	 // 數據是自身提供的 (hobbies)     template:`<ul><li v-for='hobby in hobbies' v-bind:key='hobby.id'>{{hobby}}</li></ul>`,     data(){         return {             hobbies:['看劇','看動漫','吃好吃的']         }     }}

注冊局部組件:

// 僅由注冊過該局部組件的vue對象才能使用,此處為p#vue-app-one// 注意命名規范,components中對象的key將會被作為標簽名,多個單詞拼接的命名需使用橫桿法// 可以寫成msg-component,此處直接簡化了命名為msg,new Vue({     el:"#vue-app-one",     components:{         "msg": msgComponent    }})

html文件中使用<msg></msg>

<p id="vue-app-one">     <p>這里是vue-app-one</p>     <mycomponent></mycomponent>     <mycomponent></mycomponent>     <p>我的愛好:</p>     <msg></msg> <!--使用局部組件--></p>

效果: 紅框圈出的部分就是局部組件渲染出來的
一小時入門vue組件(建議收藏)

父向子傳值/傳引用:prop

靜態傳值

創建子組件:

var titleComponent = {     props:["title"],     template:`<p>{{title}}</p>`     // 所需要的數據title由父組件提供}

在父組件的components屬性中注冊子組件:

new Vue({     el:"#vue-app-one",     components:{         "msg": msgComponent,         "titleComponent":titleComponent    },})

在父組件上使用子組件:

<!-- p#vue-app-one為父組件 --><p id="vue-app-one">     <p>這里是vue-app-one</p>     <mycomponent></mycomponent>     <mycomponent></mycomponent> 	<!--使用子組件title-component,并傳值"我的愛好:"給子組件-->     <title-component title="我的愛好:"></title-component>     <msg></msg></p>

效果:紅框標記處就是父向子傳值并展示

一小時入門vue組件(建議收藏)

動態傳值:v-bind

定義子組件:

var titleComponent = {     props:["title"],     template:`<p>{{title}}</p>`}

在父組件的components屬性中注冊子組件:

new Vue({     el:"#vue-app-one",     components:{         "msg": msgComponent,         "titleComponent":titleComponent    },     data(){         return {             title:"my hobbies are ",         }     }})

使用子組件,通過綁定父組件data中的變量title來實現動態傳值:

<!-- p#vue-app-one為父組件 --><p id="vue-app-one">     <p>這里是vue-app-one</p>     <mycomponent></mycomponent>     <mycomponent></mycomponent>     <!-- 動態綁定title -->     <title-component v-bind:title="title"></title-component>     <msg></msg></p>

效果:紅框處就是動態綁定獲取數據的展示
一小時入門vue組件(建議收藏)
傳遞數組等復雜數據時,也可以使用v-bind來動態傳值,如:
需要向子級傳遞hobbies數組,在vue實例對象(父)中創建數據hobbies

new Vue({     el:"#vue-app-one",     components:{         "msg": msgComponent,         "titleComponent":titleComponent    },     data:{         title:"my hobbies are ",         hobbies:['看劇','看動漫','吃好吃的'], //需要向子組件傳遞的數據     }})

定義子組件

var msgComponent = {     template:`             <p>{{hobby}}</p>            `,     props:["hobby"],     data(){         return {            }     }}

使用子組件

<!-- p#vue-app-one為父組件 --><p id="vue-app-one">     <p>這里是vue-app-one</p>     <mycomponent name="ccy"></mycomponent>     <mycomponent name="ccy"></mycomponent>     <title-component v-bind:title="title"></title-component>     <!-- 動態傳值:hobbies -->     <msg v-for="hobby in hobbies" v-bind:hobby="hobby" v-bind:key="hobby.id"></msg></p>

效果:
一小時入門vue組件(建議收藏)
跳回“一點想法”處

子向父:事件傳值$emit

子組件不能通過prop向父組件傳遞數據,需要使用事件向父組件拋出一個值,告知父組件我需要實現一個功能,由父組件處理這個事件

例子:點擊按鈕,改變名稱chinesename
(由于data變量名不支持chinese-name形式,花括號里不支持chineseName形式,所以這里我都用了小寫,此處記錄一下,日后學到了新知再來填坑)

先在父組件的data中定義chinesename的初始值:

new Vue({     el:"#vue-app-one",     data:{          chinesename:"anzhi" // chinesename初始值     }})

創建子組件,并注冊事件change-name(就像click事件一樣,需要讓系統能夠辨認這是一個事件并監聽,當事件被觸發時,執行某項約定好的操作):

  Vue.component('blog-post', {     props: ['chinesename'],     template: `       <p class="blog-post">         <h3>{{ chinesename }}</h3>         <button v-on:click='$emit("change-name","ruosu")'>             修改名字         </button>       </p>    `     // blog-post組件包含一個h3,顯示chinesename,和一個按鈕     // 點擊這個按鈕,觸發change-name事件,將"ruosu"作為參數傳遞給指定的處理函數onChangeName   })

在父組件中使用子組件,定義change-name的處理函數為onChangeName:

<p id="vue-app-one">     <p>這里是vue-app-one</p> 	<!-- v-bind:通過prop給子組件傳遞chinesename的初始值 --> 	<!-- v-on:子組件通過$emit給父組件傳遞新的chinesename的值 --> 	<p id="blog-posts-events-demo"> 	      <blog-post 	        v-bind:chinesename='chinesename' 	        v-on:change-name = "onChangeName" 	      ></blog-post> 	 </p></p>

在父組件處定義事件處理函數onChangeName:

new Vue({     el:"#vue-app-one",     data:{           chinesename:"anzhi"     },     methods:{         onChangeName:function(value){         	// 將chinesename換成傳遞過來的數據             this.chinesename=value        }     }})

效果:
一小時入門vue組件(建議收藏)

一點想法

關于父子組件的區分,在此寫一點總結,還是日后學了新知識再來填坑 ┗|`O′|┛ 嗷~~

官網中沒有很明確指明兩者的定義和區別,在網上搜了一圈,覺得比較多人認可并且好理解的是:

  • el指定的根元素為父組件(使用之處為父組件)
  • vue實例對象也可看做組件

在前面這些父子傳值的例子中,我們可以看到,對于局部組件,我們會在某個html根元素中注冊并使用,所以此時el指定的根元素在html文件中是這個局部組件的父組件,局部組件在html使用時便是這個父組件的一份子,承擔數據傳輸的責任
跳轉到父向子動態傳值案例

一小時入門vue組件(建議收藏)
一小時入門vue組件(建議收藏)

再用繞口令說一波,即:title-component組件定義處與使用處,兩者身份是不一樣的,在定義處,它是局部組件,也是子組件,需注冊才能使用;在使用處,它是根元素的包含一部分,根元素為父組件,而“它”,承擔著父組件與子組件數據溝通的重任

這個總結在全局組件情況下也適用,使用該全局組件的根元素是父組件,如上面的子向父傳值的案例,p#vue-app-one是父組件,<blog-post></blog-post>作為父子組件溝通的橋梁,全局組件blog-post為子組件
跳轉到子向父案例

圖示:
一小時入門vue組件(建議收藏)

如果是子組件又嵌套了子組件,被嵌套的組件是子子組件,以此類推

使用腳手架創建項目并運用組件and傳值

CLI腳手架安裝步驟可以看我的這篇文章。使用CLI腳手架創建項目,簡單快捷,特別的是,頁面內容和數據傳遞需要寫在.vue文件里,每個vue文件為一個模塊。
我們通過合理組裝各模塊(組件)來完成某項具體的功能,組件之間的配合以及父子傳值的作用在此處體現得更明顯一些。每一個vue文件都可看作一個組件,我們可以把頁面按照需求劃分成若干個部分,如導航欄,中間內容和底部三個部分。每個部分的實現分散到各子組件中完成,包括頁面的展示和數據的獲取。

如自定義博客頁面:

  • 主頁面由vue-app主組件構成,包含導航欄、中間部分、底部欄三部分

  • 導航欄由vue-header子組件完成

  • 中間內容按照功能劃分

    • 添加博客:addBlob子組件
    • 顯示博客:showBlob子組件
    • 修改博客:modifyBlob子組件
    • 點擊顯示單篇博客內容:singleBlob子組件
  • 底部信息欄由vue-footer完成
    除了主頁面,其他子部分和組件均根據功能劃分,輔助主頁面展示

個人博客父向子傳值的示意圖如下:

  • 各個子功能由不同組件構成,拼成一個大一些的功能組件
  • 點擊展示單篇博客和修改博客兩個組件均需要從主頁面獲取博客id,才能進行相應展示和操作,這便是典型的父向子傳值
    一小時入門vue組件(建議收藏)

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国语做受对白XXXXmp4| 国产成人精品综合久久久| 亚洲超星团在哪个平台播| 国产亚洲成AV人片在线观看| ZZIJZZIJ亚洲日本少妇| 一女大战七个黑人到喷浆| 午夜私人理论电影| 日韩精品人妻中文字幕有码| 老师趴讲台屁股撅起来作文| 狠狠色综合TV久久久久久| 隔壁老王国产在线精品| EEUSS影院免费最电影| 一夲道无码人妻精品一区二区| 在线 | 麻豆国产传媒| 亚洲精品无码成人片| 无码人妻精品一区二区蜜桃百度| 人与禽交VIDEOSGRATI| 欧美VPSWINDOWS性另类| 里番本子库绅士ACG全彩无码| 妺妺晚上扒我内裤玩我J| 久久夜色精品国产噜噜亚洲SV| 国内精品久久久人妻中文字幕| 国产成人精欧美精品视频| 国产在线清纯极品美女援交| 国产精品亚洲第一区焦香味| 国产成人久久精品二区三区| 成 人 黄 色 网 站 在线播 | 精品高潮呻吟99AV无码| 国产色婷婷五月精品综合在线| 国产成人久久精品一区二区三区| 好大好厉害我接了一个顾客| 国产又色又爽又黄的网站在线 | 啪啪啪1000免费观看| 男男GV白嫩小受GV在线播放| 蜜臂无码AV在线| 美女露100%双奶头无遮挡图片| 两毫米的小洞你却稳稳命中| 日本熟妇人妻XXXXX视频| 日韩A级无码免费视频| 亚洲AV成人片无码网站网一区| 小说蜜汁樱桃林妙妙的结局| 无码一区二区三区不卡AV| 无码国产精品一区二区免费模式 | 精品无人区麻豆乱码1区2| 精品人妻一区二区三区免费看| 黑人狂躁中国人AⅤ| 女的用嘴巴吃鸡会得HPV| 欧美性操大鸡狠狠| 人妻少妇精品视频一区二区三区 | 无遮挡边摸边吃奶边做视频免费| 无码人妻熟妇av又粗又大| 97精品依人久久久大香线蕉97| 国产欧美一区二区精品性色| √天堂中文最新版在线中文| 中文字幕人妻色偷偷久久| 2021国产精品国产精华| HD极品FREE性XXⅩ护士I| 成人无码专区免费播放三区| 国产成人A∨激情视频厨房| 久久久久人妻一区精品| 欧美成人WWW免费全部网站| 无码人妻一区二区三区免费N鬼沢| 中国 韩国 日本 免费看| TPU色母和PA6色母的作用| 高潮潮喷奶水飞溅视频无码| 久久久久久久精品免费| 欧美成人一区二区三区在线观看| 小雪尝禁果又粗又大的中国地图| 77777欧美毛片777777| 狠狠综合久久久久尤物丿| 免费高清AV一区二区三区 | 黑人60厘米全进去了| 国内久久婷婷五月综合欲色广啪| 欧美性色欧美A在线播放| 女教师娇喘潮喷抽搐在线视频| 欧美性猛交XXXX乱大交蜜桃| 亚洲国产精品久久久久秋霞小| 欲しがる人妻 波多野结衣| TPU色母和PA6色母的区别| 精品无码国产日韩制服丝袜| 国产成人午夜在线视频A站| 成人午夜免费无码福利片| 久久精品无码一区二区三区免费 | 午夜亚洲WWW湿好大| 扒掉内裤露出打嫩嫩的屁股| 国产经典一区二区三区蜜芽| 精品免费久久久久久久| 铜铜铜铜铜铜铜好多疼| 亚洲伊人久久综合成人| JIZZJIZZ国产在线观看| 久久久久久精品免费不卡| 午夜伦情电午夜伦情电影| 成年性生交大片免费看| 好男人无码内射AV| 天堂А√中文在线官网| 亚洲小说图区综合在线| 办公室少妇愉情理伦片| 好硬好大好爽18禁免费看男男| 精品一区二区三区在线观看视频| 欧洲肉欲K8播放毛片护士报告| 一边亲着一面膜下奶韩剧| 黑人巨大精品欧美一区二区| 婷婷五月综合缴情在线视频| 被陌生人在地铁揉到高潮| 女人18片毛片60分钟完整版| 伊人久久亚洲综合| 粉嫩性色av一区二区三区| 久久ER99热精品一区二区| 日韩精品内射视频免费观看| 99久久免费国产精品2021| 国产香蕉97碰碰视频VA碰碰看| 色欲av成人蜜臀av不卡| 伊人久久大香线蕉AV色婷婷色| 国外精产品W灬源码16| 无码人妻久久一区二区三区免费| 粗大的内捧猛烈进出| 久久久久久精品免费免费自慰| 亚洲AV永久纯肉无码精品动漫| YY8090韩国理伦片在线| 女的用嘴巴吃鸡会得HPV| 最新亚洲人成无码网WWW电影| 国产欧美VA欧美VA香蕉在 | 欧美肉体XXXX极品粗大| AV天堂永久资源网| 精品久久久久久久久午夜福利| 唔嗯啊欧美一级作爱网站| 国产精品毛片VA一区二区三区 | 国内精品国内精品自线在拍| 校花内裤被涂满了强烈春药| 国产乱人伦APP精品久久| 无码人妻一区二区三区AV| 国产精品久久国产三级国不卡顿| 无码精品人妻一区二美国区三区| 国产精品不卡无码AV在线播放| 麻豆精产国品一二三区别| 亚洲AV无码天堂一区二区三区| 宝宝怎么这么湿~别磨| 日本亲近相奷中文字幕视频| 越南少妇BBV叉叉叉| 蜜桃传媒一区二区亚洲AV| 自拍偷自拍亚洲精品播放| 哪种女人弄进去最舒服| HD2LINODE日本成熟IP| 日本亲与子乱人妻HD| 国产办公室秘书无码精品99| 婷婷色婷婷开心五月四房播播| 国产精品夜间视频香蕉| 亚洲AV无码乱码麻豆精品国产| 韩国19禁无遮挡啪啪无码网站| 亚洲色播爱爱爱爱爱爱爱| 国产欧美国产综合每日更新| 亚洲AV无码乱码国产精品老妇| 精品亚洲国产成人AV不卡| 在公交车上弄到高C了怎么办 | 久久99精品久久久久久蜜芽| 一本大道香蕉大L在线吗视频| 国精产品一区二区三区有限公司| 亚洲AV中文无码乱人伦在线播放| 国产成人精品一区二区秒拍| 体育生爽擼雞巴CHINESE| 成年网站免费视频黄A站| 三上悠亚SSNI452内衣模特| А√新版天堂资源在线BT | 一区二区三区四区黄色网站 | 精品一区二区久久久久久久网站| 一二三四在线视频观看社区| 欧美老熟妇乱XXXXX| 中文字幕日本最新乱码视频| 琪琪秋霞午夜AV影院| 国产AV导航大全精品| 日韩欧美中文字幕看片你懂的 | 亚洲人成人无码WWW| 国产嫖妓风韵犹存对白| 亚洲日本VA午夜在线影院| 你的婚礼免费观看完整版| 动性配人ⅩXXXX配| 日韩一区二区三区无码免费视频| 国产精品丝袜黑色高跟鞋| 人妻 白嫩 蹂躏 惨叫| 中文字幕免费不卡二区| 强壮公的侵犯让我高潮不断| 国产精品香蕉成人网在线观看| 亚洲AⅤ无码一区二区三区 | www.性xxxxx| 午夜香吻高清观看视频在线| 久久久久亚洲AV成人无码网站 | 在线观看韩国电影| 日韩少妇内射免费播放| 激情无码白丝人妻又大又粗 | 国产精品XXX大片免费观看| 亚洲一线二线三线品牌精华液 | 亚洲AⅤ优女AV综合久久久| 泷泽萝拉AV种子| 高潮久久久久久久久不卡| 亚洲色大成网站WWW在线| 久久国国产免费999| 亚洲中文字幕无码中字| 日本日本熟妇中文在线视频| 好爽…又高潮了毛片免费看| 99久久婷婷国产一区二区|