vue筆記

1.基本綁定:

? ?new Vue(

? ? ? ?{

? ? ? ? ? ?el:'#elID',

? ? ? ? ? ?data:{

? ? ? ? ? ? ? ?// data obj

? ? ? ? ? ?},

? ? ? ? ? ?computed:{

? ? ? ? ? ? ? ?// computed obj

? ? ? ? ? ?},

? ? ? ? ? ?methods:{

? ? ? ? ? ? ? ?// methods obj

? ? ? ? ? ?},

? ? ? ?}

? ?);

2.指令:

? ?前綴為v-

? ?*v-if, v-for, v-bind, v-on...

? ?*特性插值會轉(zhuǎn)為v-bind綁定: href='{{url}}' --> v-bind:href='url'

3.數(shù)據(jù)綁定只接受單個表達式:

? ?{{number+1}} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ok

? ?{{ok?'yes':'no'}} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ok

? ?{{message.split('').reverse().join('')}} ? ? ? ?ok

? ?{{var a=1}} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?no

? ?{{if(ok){return message}}} ? ? ? ? ? ? ? ? ? ? ? ?no

4.過濾器:

? ?管道式的寫法 --> {{message|capitalize}}

? ?*可以串聯(lián): filterA|filterB

? ?*可以帶參數(shù): filterA 'arg1' arg2

5.修飾符

? ?前綴為.

? ?*v-bind:href.literal='a/b/c'

6.縮寫

? ?v-bind:href='url' --> :href='url'

? ?v-on:click='dosomething' --> @click='dosomething'

7.計算setter

? ?computed:{

? ? ? ?fullName:{

? ? ? ? ? ?get:function(){

? ? ? ? ? ? ? ?// getter

? ? ? ? ? ?}

? ? ? ? ? ?set:function(newValue){

? ? ? ? ? ? ? ?//setter

? ? ? ? ? ?}

? ? ? ?}

? ?}

8.Class與Style綁定

? ?*變量語法:v-bind:class="{'class-a':isA, 'class-b':isB}" ? ? ? ?--> ? ? ? ?data:{isA:true, isB:false}

? ?*對象語法:v-bind:class="classObj" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--> ? ? ? ?data:{classObj:{'class-a':true, 'class-b':false}}

? ?*數(shù)組語法:v-bind:class='[classA, classB]' ? ? ? ? ? ? ? ? ? ? ? ?--> ? ? ? ?data:{classA:'class-a', classB:'class-b'}

9.條件渲染

? ?*v-if, v-show, v-else

? ?*

Yes

No

? ?*

Yes

No

? ?*show只是簡單的display:none

10.列表渲染

? ?v-for

? ?*內(nèi)置變量:{{$index}}

? ?*用法:v-for='item in items'

v-for='(index, item) in items' ? ?*數(shù)組則是索引,遍歷對象則是鍵

11.數(shù)組變動檢測

? ?能觸發(fā)視圖更新的方法:

? ?*push, pop, shift, unshift, splice, sort, reverse ? ? ? ? ? ?// 變異方法

? ?*filter, concat, slice ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 替換數(shù)組

? ?*盡可能復用DOM: track-by

? ? ? ?v-for="item in items" track-by="_uid"

? ? ? ?track-by='$index' ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 根據(jù)index追蹤,不是很明白!...片段不被移動,簡單地已對應索引的新值刷新,也能處理數(shù)據(jù)數(shù)組中重復的值...

不能檢測到以下變化:

1.直接用索引設置元素: ? ?vm.items[0]={}; ? ? ? ? ? ? ? ? ? ?// vue解決方案:vm.items.$set(0, { childMsg: 'Changed!'}), vm.items.$remove(item)

2.修改數(shù)據(jù)的長度: ? ? ? ?vm.items.length=0; ? ? ? ? ? ? ? ?// js中常見的清空, vue解決方案:直接用空數(shù)組替換

12.對象v-for

內(nèi)置變量:$key

13.值域v-for

{{ n }}

14.內(nèi)置的過濾器

? ?filterBy 和 orderBy

15.方法與事件處理器

·v-on 監(jiān)聽DOM事件

? ? ? ?

? ? ? ?

? ? ? ? ? ? ? ?// 內(nèi)聯(lián)語句處理器, $event為內(nèi)置變量,原生的DOM事件

·事件修飾符

// 阻止冒泡和默認行為,修飾符可以串聯(lián)

·按鍵修飾符

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 鍵盤事件后面可接keyCode

常見的按鍵有提供別名:

·enter

·tab

·delete

·esc

·space

·up

·down

·left

·right

16.表單控件綁定

·v-model綁定字段

? ? ? ? ? ?// 綁定的值通常是靜態(tài)字符串,勾選框是布爾值

·參數(shù)特性

lazy ? ? ? ?// 延遲到change事件中同步(原為input)

number ? ? ? ?// 僅允許輸入數(shù)字

debounce ? ?// 延時同步

17.過渡

典型的過渡:

? ? ? ?

需要添加CSS樣式:

.expand-transition(必須), .expand-enter, .expand-leave

*如果未設置, 默認為.v-transition, .v-enter, .v-leave

同時提供鉤子:

Vue.transition('expand',{...});

·beforeEnter, enter, afterEnter, enterCancelled, beforeLeave, leave, afterLeave, leaveCancelled

漸近過渡:

? ? ? ? ? ?

*鉤子stagger, 延時過渡

18.組件

·創(chuàng)建組件: ? ? ? ?var c = Vue.extend({

? ? ? ? ? ? ? ? ? ? ? ?template:'

A custom component!
',

});

·注冊組件: ? ? ? ?Vue.component('my-component', c); ? ? ? ? ? ? ? ? ? ?// 如果名字是myComponent, html中必須寫成my-component

? ?·使用組件: ? ? ? ?

? ?// html

new Vue({el:'#app'}); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// js

*注冊可縮寫為 ? ?vue.component('my-component',{

? ? ? ? ? ? ? ? ? ? ? ?template:'

A custom component!
',

});

局部注冊:

var c = Vue.extend({});

var parentComponent = Vue.extend({

components:{

'my-component': c,

}

});

組件選項:

var c = Vue.extend({

data:function(){

return {a:1};

}

});

is特性:

*table中限制其他的節(jié)點不能放置其中

? ? ? ?

? ?Props:

? ? ? ?props用以從父組件接收數(shù)據(jù):

使用:

Vue.component('child',{

props:['msg'],

template:'{{msg}}'

});

聲明:

// 字面量語法

// 動態(tài)語法

*如果props是myMsg, html中需要用my-msg(即:camelCase - kebab-case, 因為html的特性是不區(qū)分大小寫)

*字面量和動態(tài)語法稍有不同

// 傳遞了一個字符串 "1"

// 傳遞實際的數(shù)字

Props綁定類型:

// 默認為單向綁定

// 雙向綁定

//單次綁定

*如果prop是一個對象或數(shù)組,是按引用傳遞。不管使用哪種綁定方式,都將是雙向綁定

Props驗證:

props:{ ? ? ? ? ? ?// 此時props是一個對象

propA: Number,

propB:{

type: String, ? ? ? ? ? ? ? ? ? ?// 類型(原生構(gòu)造器:String, Number, Boolean, Function, Object, Array)

required: true, ? ? ? ? ? ? ? ? ? ?// 是否必須項

default: 'thyiad', ? ? ? ? ? ? ? ?// 默認值(如果是Object, 默認值需由一個函數(shù)返回)

validator: function(value){ ? ? ? ?// 驗證

return value === 'thyiad';

},

coerce:function(val){

return val+''; ? ? ? ? ? ? ? ?// 將值強制轉(zhuǎn)換為字符串

return JSON.parse(val); ? ? ? ?// 將JSON字符串轉(zhuǎn)換為對象

}

}

}

父子組件通信:

this.$parent ? ? ? ?// 子組件訪問父組件

this.$root ? ? ? ? ? ?// 訪問根實例

this.$children ? ? ? ?// 父組件的所有子元素

*不建議在子組件中修改父組件的狀態(tài)

自定義事件:

$on() ? ? ? ? ? ? ? ?// 監(jiān)聽事件

$emit() ? ? ? ? ? ? ? ?// 觸發(fā)事件

$dispatch() ? ? ? ? ? ?// 派發(fā)事件,沿著父鏈冒泡

$broadcast() ? ? ? ?// 廣播事件, 向下傳遞給所有的后代

使用:

子組件中綁定函數(shù)派發(fā)事件:

methods:{

notify:function(){

this.$dispatch('child-msg',this.msg);

}

}

父組件中定義事件:

events:{

'child-msg':function(msg){

this.messages.push(msg);

}

}

*更直觀的聲明方式:

// 直觀的為父組件定義事件(child-msg), 并且觸發(fā)父組件的handleIt函數(shù), 子組件只關注觸發(fā)事件

子組件索引:

? ? ? ?

var child = parent.$refs.profile;

使用Slot分發(fā)內(nèi)容:

單個Slot:

父組件的內(nèi)容將被拋棄,除非子組件包含

如果只有一個沒有特性的slot, 整個內(nèi)容將被插到它所在的地方, 替換slot.

父組件:

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ?

parent content

子組件模板:

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ?

child content

? ? ? ? ? ? ? ? ? ?

如果父節(jié)點沒有設置內(nèi)容,這里才會被顯示

命名Slot:

父組件模板:

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ?

One

? ? ? ? ? ? ? ? ? ?

two

? ? ? ? ? ? ? ? ? ?

Default A

子組件模板:

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ?

// 默認slot, 找不到匹配內(nèi)容的回退插槽, 如果沒有默認的slot, 不匹配內(nèi)容將被拋棄

? ? ? ? ? ? ? ? ? ?

動態(tài)組件:

可以在不同組件之間切換:

new Vue({

el:'body',

data:{

currentView:'home',

},

components:{

home:{},

posts:{},

archive:{},

}

});

父組件:

// component是Vue保留的元素

*keep-alive用來把切換出去的組件保留在內(nèi)存中, 可以保留它的狀態(tài)避免重新渲染

activate鉤子:

用以在切入前做一些異步操作:

activate:function(done){

var self = this;

loadDataAsync(function(data){

self.someData=data;

done();

});

}

transition-mode

指定列兩個動態(tài)組件之間如何過渡:

? ? ? ? ? ? ? ? ? ?

*默認進入與離開平滑地過渡, 可以指定另外兩種模式:in-out, out-in (先進入or先離開)

組件和v-for:

? ? ? ? ? ?

*因為組件的作用域是孤立的, v-for里的item無法直接傳遞給組件, 必須像上面一樣使用props傳遞數(shù)據(jù)

異步組件

資源命名約定

遞歸組件

片段實例

*推薦模板只有一個根節(jié)點(使用template選項時)

內(nèi)聯(lián)模板

組件把它的內(nèi)容當做它的模板

? ? ? ? ? ?

*不推薦

19.深入響應式原理

·如何追蹤變化

*使用Object.defineProperty設置getter/setter

·變化檢測問題

*不能檢測到對象屬性的添加或刪除

*vm.$set('b', 2);

Vue.set(object, key, value);

·初始化數(shù)據(jù)

*推薦在data對象上聲明所有的響應屬性

·異步更新隊列

*默認異步更新DOM, 下次事件循環(huán)時清空隊列, 執(zhí)行必要的DOM更新

*Vue.nextTick(callback);

·計算屬性的秘密

*計算屬性是有緩存的, 除非顯示設置為不緩存

computed:{

attr:function(){

return Date.now()+this.msg;

}

}

TO:

computed:{

attr:{

cache: false,

get: function(){

return Date.now()+this.msg;

}

}

}

*但只是在JS中訪問是這樣的, 數(shù)據(jù)綁定仍是依賴驅(qū)動的。 ? ? ? ?

? ?

? ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容