久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

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

      本篇文章給大家?guī)砹藇ue組件的相關(guān)知識(shí),其中包括了怎樣實(shí)例化多個(gè)vue對(duì)象、全局組件以及局部組件還有父像子傳值等等,希望對(duì)大家有幫助。

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

      初識(shí)組件應(yīng)用

      實(shí)例化多個(gè)vue對(duì)象

      用new創(chuàng)建多個(gè)vue對(duì)象并命名,可以通過變量相互訪問
      例子:對(duì)象2修改對(duì)象1的name變量

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

      效果:點(diǎn)擊后修改”ccy1“為”ccy333“

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

      全局組件

      定義與使用

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

      例子:

      定義組件:

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

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

      使用組件:

      ① 在vue對(duì)象對(duì)應(yīng)的根元素(el指定標(biāo)簽)下使用
      ② 由于定義的是全局組件,所以可以在任意的vue對(duì)象下使用
      ③ 組件可復(fù)用,在一個(gè)vue對(duì)象下可以使用多次,且組件間互相獨(dú)立

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

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

      data是一個(gè)函數(shù)

      在vue對(duì)象中,data屬性值是一個(gè)對(duì)象,比如這樣的:

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

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

      因此,為保證數(shù)據(jù)的獨(dú)立性,即每個(gè)實(shí)例可以維護(hù)一份被返回對(duì)象的獨(dú)立的拷貝,data為每個(gè)實(shí)例都return一份新創(chuàng)建的數(shù)據(jù),不同的vue對(duì)象獲取的data均互不影響

      在vscode中不允許組件中的data是對(duì)象,會(huì)報(bào)錯(cuò):

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

      局部組件

      • 局部組件注冊(cè)在某個(gè)vue對(duì)象中,
      • 只有注冊(cè)過該局部組件的vue對(duì)象才能使用這個(gè)局部組件

      例子:
      局部組件定義

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

      注冊(cè)局部組件:

      // 僅由注冊(cè)過該局部組件的vue對(duì)象才能使用,此處為p#vue-app-one// 注意命名規(guī)范,components中對(duì)象的key將會(huì)被作為標(biāo)簽名,多個(gè)單詞拼接的命名需使用橫桿法// 可以寫成msg-component,此處直接簡(jiǎn)化了命名為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>

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

      父向子傳值/傳引用:prop

      靜態(tài)傳值

      創(chuàng)建子組件:

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

      在父組件的components屬性中注冊(cè)子組件:

      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>

      效果:紅框標(biāo)記處就是父向子傳值并展示

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

      動(dòng)態(tài)傳值:v-bind

      定義子組件:

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

      在父組件的components屬性中注冊(cè)子組件:

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

      使用子組件,通過綁定父組件data中的變量title來實(shí)現(xiàn)動(dòng)態(tài)傳值:

      <!-- p#vue-app-one為父組件 --><p id="vue-app-one">     <p>這里是vue-app-one</p>     <mycomponent></mycomponent>     <mycomponent></mycomponent>     <!-- 動(dòng)態(tài)綁定title -->     <title-component v-bind:title="title"></title-component>     <msg></msg></p>

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

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

      定義子組件

      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>     <!-- 動(dòng)態(tài)傳值:hobbies -->     <msg v-for="hobby in hobbies" v-bind:hobby="hobby" v-bind:key="hobby.id"></msg></p>

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

      子向父:事件傳值$emit

      子組件不能通過prop向父組件傳遞數(shù)據(jù),需要使用事件向父組件拋出一個(gè)值,告知父組件我需要實(shí)現(xiàn)一個(gè)功能,由父組件處理這個(gè)事件

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

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

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

      創(chuàng)建子組件,并注冊(cè)事件change-name(就像click事件一樣,需要讓系統(tǒng)能夠辨認(rèn)這是一個(gè)事件并監(jiān)聽,當(dāng)事件被觸發(fā)時(shí),執(zhí)行某項(xiàng)約定好的操作):

        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組件包含一個(gè)h3,顯示chinesename,和一個(gè)按鈕     // 點(diǎn)擊這個(gè)按鈕,觸發(fā)change-name事件,將"ruosu"作為參數(shù)傳遞給指定的處理函數(shù)onChangeName   })

      在父組件中使用子組件,定義change-name的處理函數(shù)為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>

      在父組件處定義事件處理函數(shù)onChangeName:

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

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

      一點(diǎn)想法

      關(guān)于父子組件的區(qū)分,在此寫一點(diǎn)總結(jié),還是日后學(xué)了新知識(shí)再來填坑 ┗|`O′|┛ 嗷~~

      官網(wǎng)中沒有很明確指明兩者的定義和區(qū)別,在網(wǎng)上搜了一圈,覺得比較多人認(rèn)可并且好理解的是:

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

      在前面這些父子傳值的例子中,我們可以看到,對(duì)于局部組件,我們會(huì)在某個(gè)html根元素中注冊(cè)并使用,所以此時(shí)el指定的根元素在html文件中是這個(gè)局部組件的父組件,局部組件在html使用時(shí)便是這個(gè)父組件的一份子,承擔(dān)數(shù)據(jù)傳輸?shù)呢?zé)任
      跳轉(zhuǎn)到父向子動(dòng)態(tài)傳值案例

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

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

      這個(gè)總結(jié)在全局組件情況下也適用,使用該全局組件的根元素是父組件,如上面的子向父?jìng)髦档陌咐?,p#vue-app-one是父組件,<blog-post></blog-post>作為父子組件溝通的橋梁,全局組件blog-post為子組件
      跳轉(zhuǎn)到子向父案例

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

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

      使用腳手架創(chuàng)建項(xiàng)目并運(yùn)用組件and傳值

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

      如自定義博客頁(yè)面:

      • 主頁(yè)面由vue-app主組件構(gòu)成,包含導(dǎo)航欄、中間部分、底部欄三部分

      • 導(dǎo)航欄由vue-header子組件完成

      • 中間內(nèi)容按照功能劃分

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

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

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

      贊(0)
      分享到: 更多 (0)
      ?
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)