vue組件學(xué)習(xí)

這是跟著高陽老師學(xué)習(xí)vue的課堂筆記,之前的都沒做筆記。??。
高陽老師的官網(wǎng)是一起學(xué)js,本來想發(fā)到老師創(chuàng)建的社區(qū)的,發(fā)現(xiàn)已經(jīng)有人已經(jīng)發(fā)了筆記了。我就不去發(fā)了。感興趣的可以去學(xué)習(xí)。社區(qū)很好,高陽老師也是超級棒。


正文

vue的核心庫,解決了數(shù)據(jù)和視圖綁定問題。

組件是vue強(qiáng)大功能之一。

vue的組件 和 HTML中的便簽 不是一個層面的東西了。這里的組件是對原始的HTML元素進(jìn)行封裝,來拓展它的能力。在較高層面上,組件是自定義的元素。vue.js的編輯器為它添加了特殊功能。這些功能是原始的HTML不具備的。

在有些情況下,組件也可以表現(xiàn)為用 is 特性進(jìn)行了擴(kuò)展的原生 HTML 元素。

也就是說,與原生的HTML元素相比,元素增加了is特性。

<div>
  <xu> xxx </xu>
</div>

<xu>非原生的標(biāo)簽,但是并沒有影響顯示,說明解析是容錯的。在解析的時候也沒有什么問題。

但是在某些情況下,比如在列表中,默認(rèn)的非原生的標(biāo)簽不能正常的顯示。

<table>
  <my-row>...</my-row>
</table>

<my-row>是不能被解析成 tr來使HTML顯示成我們希望的樣子,

is特性(is what 是什么),是表現(xiàn)為某種標(biāo)簽樣式的特性,比如下面示例,is='my-row' 告訴瀏覽器 my-row標(biāo)簽作為一個tr標(biāo)簽使用。

<table>
  <tr is="my-row"></tr>
</table>

is的那就話就是仿佛在說 這個元素是 什么什么 你先按這個解析。后續(xù)vue再偷天換日。

以下三種,HTML可以正常解析,可以不使用is屬性。

  • <script type="text/x-template">
  • JavaScript內(nèi)聯(lián)模板字符串
  • .vue組件

所有的vue組件同時也都是vue的實例。他們可以接受相同的選項對象,并提供相同的聲明周期鉤子。

  • 一個組件是具備自己的聲明周期的,
  • 一個有自己的數(shù)據(jù)和方法,(注意,組件中的data必須是個函數(shù),不能是obj,但是這個函數(shù)必須返回一個obj,最終data值其實還是個obj)
  • 組件和其他的組件是隔離的。是不能調(diào)用其他組件的數(shù)據(jù)和方法的。

他們之間需要通過一些方法來通信。

組件的創(chuàng)建方式:

創(chuàng)建全局組件:

Vue.component('name',option_obj);

全局組件意思是 所有的vue實例都可以訪問,

全局組件是vue中是不常用的,要盡量避免使用全局組件。

組件創(chuàng)建(或者注冊)之后,便可以作為自定義標(biāo)簽在HTML中使用。

局部組件

不用全局創(chuàng)建,通過某個Vue對象的components選項實現(xiàn)。

new Vue({
  components : {
    ...
  }
});

除非所有的頁面都能用到的組件,否則不要定義為全局組件。

在vue選項對象中定義的組件,僅供該vue實例使用。

組件組合

組件可以組合,組件套組件。形成新的組件。

使用屬性prop傳遞數(shù)據(jù)

往組件里面塞數(shù)據(jù),必須通過屬性傳遞。v-bind:message="message"

Vue.component('child', {
  // declare the props
  props: ['message'],
  // like data, the prop can be used inside templates and
  // is also made available in the vm as this.message
  template: '<span>{{ message }}</span>'
})

v-bind:message 可以縮寫成 :message

駝峰命名和短橫線命名

在vue中,組件的名稱請使用短橫線方式。寫HTML時的習(xí)慣就是短橫線,而JavaScript中命名變量是習(xí)慣駝峰式命名的。

。。。。

高階的HTML開發(fā)者可以都使用駝峰命名。因為高階的vue開發(fā)者,不care HTML,HTML不是占主要部分,JavaScript占據(jù)主導(dǎo)地位。

v-指令 后面的雙引號 是表達(dá)式 ,不是v指定就是一個字符串常量。不會當(dāng)做js表達(dá)式計算

vue組件的數(shù)據(jù)流是單向的,只允許父組件向子組件傳遞數(shù)據(jù),不允許組內(nèi)部的數(shù)據(jù)向父組件傳遞數(shù)據(jù)。否則就很亂,數(shù)據(jù)會變得不可控。

正確的方式是,要保證數(shù)據(jù)的變化是可控的,是可跟蹤的。推薦的使用方式是:

1,定義一個局部變量,并用prop的值初始化

2.定義一個計算屬性,數(shù)據(jù)來自 屬性 prop 的值

屬性prop驗證

要指定驗證規(guī)則,使用字符串是不可以的,要使用對象形式的。還可以設(shè)置一些可選項。

Vue.component('user-info',{
  props:  {
    name:{
      type:String,
      required:true,
      default:'xiaoming'
    }
  }
});

抄代碼

  • 處理粘貼過來HTML代碼
    • 刪除不需要的
    • 腦子里要想一下大概長什么樣子,需要什么數(shù)據(jù),把HTML代碼修改成想要的模樣。
  • 創(chuàng)建vue實例,進(jìn)行數(shù)據(jù)綁定,事件綁定等。

使用立即執(zhí)行函數(shù)??焖贅?gòu)建測試數(shù)據(jù)。使用for循環(huán)構(gòu)建數(shù)據(jù)并返回。

老師的搭建界面樣式都很6,是因為老師花時間研究Bootstrap了。把一件東西搞熟了,用習(xí)慣了,就搞的快了。

案例點:

V-for 是可以傳入index的,需要使用括號

v-for= "(item,index) in menues"

避免使用硬編碼,維護(hù)起來太麻煩。

數(shù)據(jù)層面和服務(wù)器保持一致,可以減少很多判斷,減少bug。

關(guān)于vue組件化的一些思考:

1.如何把代碼抽離成組件?

2.數(shù)據(jù)是如何傳遞給組件的?

3.組件之間是如何傳遞數(shù)據(jù)的?

4.組件之間的事件是如何傳遞的?

vue-cli是全新的前端開發(fā)方式。從原始的前端快放方式,轉(zhuǎn)變成全新的方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容