vue中踩的坑(轉(zhuǎn))

vue2.x
1.獨(dú)立構(gòu)建vs運(yùn)行時(shí)構(gòu)建
在按照vue1.0的配置配置好webpack后,會(huì)出現(xiàn)Failed to mount component: template or render function not defined. (found in root instance)
的錯(cuò)誤责球,這里涉及到vue2.0與vue1.0的第一個(gè)不同的地方。具體區(qū)別獨(dú)立構(gòu)建 vs 運(yùn)行時(shí)構(gòu)建贸伐。解決方法為在webpack配置文件中添加如下配置項(xiàng):
resolve: { alias: { 'vue$': 'vue/dist/vue.common.js' }}

2.掛載點(diǎn)的選擇
在原來(lái)的vue1.0的項(xiàng)目中我使用body
元素作為掛載點(diǎn)蹦肴,但是在vue2.0中,如果使用body
或者h(yuǎn)tml
作為掛載點(diǎn)扇苞,則會(huì)報(bào)以下警告:Do not mount Vue to <html> or <body> - mount to normal elements instead.

<font color='red'>在vue1.0中允許開(kāi)發(fā)者以body
或者h(yuǎn)tml
作為根實(shí)體的掛載點(diǎn)据某,但是到了2.0后橡娄,只能通過(guò)獨(dú)立的節(jié)點(diǎn)掛載,例如:div等癣籽,否則報(bào)警告</font>
3.動(dòng)態(tài)組件渲染(跟1.x類(lèi)似)
多個(gè)組件可以使用同一個(gè)掛載點(diǎn)挽唉,然后動(dòng)態(tài)地在它們之間切換滤祖。使用保留的 <component> 元素,動(dòng)態(tài)地綁定到它的 is 特性:
<component :is="componentId"></component><component :is="$options.components.child"></component>

keep-alive

如果把切換出去的組件保留在內(nèi)存中瓶籽,可以保留它的狀態(tài)或避免重新渲染匠童。為此可以添加一個(gè) keep-alive
指令參數(shù):
<keep-alive> <component :is="currentView"> </component></keep-alive>

4.ref
有時(shí)候需要直接在父組件中訪(fǎng)問(wèn)子組件實(shí)例,或者直接操作DOM元素棘劣,此時(shí)需要使用ref
俏让。
ref
被用來(lái)給元素或子元素注冊(cè)引用信息。引用信息會(huì)根據(jù)父組件的$refs
對(duì)象進(jìn)行注冊(cè)茬暇。如果在普通的DOM元素上使用首昔,引用信息就是元素,如果用在子組件上糙俗,引用信息就是組件實(shí)例勒奇。
<p ref="p">hello</p><child-comp ref="child"></child-comp>

當(dāng) v-for
用于元素或組件的時(shí)候,引用信息將是包含DOM節(jié)點(diǎn)或組件實(shí)例數(shù)組巧骚。
關(guān)于ref注冊(cè)時(shí)間的重要說(shuō)明: 因?yàn)閞ef本身是作為渲染結(jié)果被創(chuàng)建的赊颠,在初始渲染的時(shí)候你不能訪(fǎng)問(wèn)它們 - 它們還不存在!$refs
也不是響應(yīng)式的
劈彪,因此你不應(yīng)該試圖用它在模版中做數(shù)據(jù)綁定竣蹦。
5.自定義事件
在vue自定義事件使用$on
與$emit
,前者用于觸發(fā)監(jiān)聽(tīng)沧奴,后者用于觸發(fā)痘括,監(jiān)聽(tīng)可以有兩種方式
<my-component v-on:test="callbackFun"></my-component><script> //直接用$on監(jiān)聽(tīng) vm.$on('text',function(){})</script>

6.組件命名的約定
當(dāng)注冊(cè)組件(或者 props)時(shí),可以使用 kebab-case 滔吠,camelCase 纲菌,或 TitleCase
// 在組件定義中components: { // 使用 kebab-case 形式注冊(cè) 'kebab-cased-component': { /* ... / }, // register using camelCase 'camelCasedComponent': { / ... / }, // register using TitleCase 'TitleCasedComponent': { / ... */ }}

在 HTML 模版中,只能使用 kebab-case 形式:
<kebab-cased-component></kebab-cased-component><camel-cased-component></camel-cased-component><title-cased-component></title-cased-component>

當(dāng)使用字符串模式時(shí)可以使用 camelCase 疮绷、 TitleCase 或者 kebab-case 來(lái)引用:
<my-component></my-component><myComponent></myComponent><MyComponent></MyComponent>

7.子組件中使用this

有時(shí)候子組件簡(jiǎn)單翰舌,可以在父組件中直接注冊(cè),此時(shí)在子組件內(nèi)使用this
就是子組件實(shí)例并不是父組件冬骚,例如:
export default{ data(){ return{ parentMsg:'hello!' } }, components:{ child:{ props:['inputMessage'], template:'<span>{{inputMessage}}</span>' }, 'child-secound':{ props:['inputMessage'], template:'<span>{{upperCase}}</span>', computed:{ upperCase(){ return this.inputMessage.toUpperCase(); } } } }}

8.key
的使用
一般情況下椅贱,vue在渲染完成后,如果數(shù)據(jù)發(fā)生變化只冻,只會(huì)重新渲染數(shù)據(jù)夜涕,不會(huì)重新渲染整個(gè)元素,但是有時(shí)候我們需要元素被重新渲染属愤,此時(shí)就需要使用key
關(guān)鍵字,使用v-bind
綁定key
關(guān)鍵字酸役,可以實(shí)現(xiàn)在數(shù)據(jù)發(fā)生變化時(shí)候重新渲染整個(gè)元素住诸。注:同一父級(jí)元素下所有子元素如果都要在數(shù)據(jù)變化后重新渲染元素驾胆,則需要被綁定的key

9.v-move
的使用
在使用<transition-group>
時(shí)候,不僅可以定義進(jìn)入離開(kāi)動(dòng)畫(huà)贱呐,還可以使用新增的v-move
特性丧诺,與過(guò)渡一樣,默認(rèn)為v-move
奄薇,可以用name
進(jìn)行自定義前綴驳阎,也可以用move-class
屬性手動(dòng)設(shè)定。用了這個(gè)之后就可以實(shí)現(xiàn)移動(dòng)過(guò)程中的動(dòng)畫(huà)馁蒂。
10.跳過(guò)css檢測(cè)
對(duì)于只使用js過(guò)度的元素使用v-bind:css="false"
跳過(guò)vue對(duì)css的檢測(cè)呵晚。
render函數(shù)的使用
createElement接受三個(gè)參數(shù):
{String | Object | Function}即一個(gè)HTML標(biāo)簽 | 組件選項(xiàng) | 一個(gè)函數(shù),必須返回上述其中一個(gè)

{Object}一個(gè)對(duì)應(yīng)HTML標(biāo)簽屬性的數(shù)據(jù)對(duì)象(可選)

{String | Array}子節(jié)點(diǎn)(VNode)(可選)

?? 關(guān)于第三個(gè)參數(shù)的說(shuō)明
createElement第三個(gè)參數(shù)沫屡,如果是String饵隙,則類(lèi)似于innerHTML,如果是Array沮脖,則可以寫(xiě)入一個(gè)執(zhí)行函數(shù)金矛,這個(gè)函數(shù)用于創(chuàng)建另一個(gè)DOM結(jié)構(gòu)(而且這里如果想寫(xiě)入一個(gè)執(zhí)行函數(shù),必須是數(shù)組I捉臁J豢 )

每個(gè)createElement只能創(chuàng)建一個(gè)元素,所以如果是創(chuàng)建多個(gè)元素相互嵌套免姿,需要多個(gè)createElement函數(shù)相互嵌套饼酿,最后再render,這個(gè)跟原生js創(chuàng)建DOM元素類(lèi)似

如果需要同時(shí)渲染多個(gè)元素养泡,則需要在第三個(gè)參數(shù)的數(shù)組中嗜湃,分別寫(xiě)入需要渲染的元素,此時(shí)Vue會(huì)按照數(shù)組中順序進(jìn)行渲染

完整數(shù)據(jù)對(duì)象:
<code>
{
// 和v-bind:class一樣的 API
'class': {
foo: true,
bar: false
},
// 和v-bind:style一樣的 API
style: {
color: 'red',
fontSize: '14px'
},
// 正常的 HTML 特性
attrs: {
id: 'foo'
},
// 組件 props
props: {
myProp: 'bar'
},
// DOM 屬性
domProps: {
innerHTML: 'baz'
},
// 事件監(jiān)聽(tīng)器基于 "on"
// 所以不再支持如 v-on:keyup.enter 修飾器
// 需要手動(dòng)匹配 keyCode澜掩。
on: {
click: this.clickHandler
},
// 僅對(duì)于組件购披,用于監(jiān)聽(tīng)原生事件,而不是組件使用 vm.$emit 觸發(fā)的事件肩榕。
nativeOn: {
click: this.nativeClickHandler
},
// 自定義指令. 注意事項(xiàng):不能對(duì)綁定的舊值設(shè)值
// Vue 會(huì)為您持續(xù)追踨
directives: [
{
name: 'my-custom-directive',
value: '2'
expression: '1 + 1',
arg: 'foo',
modifiers: {
bar: true
}
}
],
// Scoped slots in the form of
// { name: props => VNode | Array<VNode> }
scopedSlots: {
default: props => h('span', props.text)
},
// 如果子組件有定義 slot 的名稱(chēng)
slot: 'name-of-slot'
// 其他特殊頂層屬性
key: 'myKey',
ref: 'myRef'
}
</code>
vue-router2.x
1.router-view
在vue-router2中<router-view>
是最頂層的出口刚陡,渲染最高級(jí)路由匹配到組件。同樣地株汉,一個(gè)被渲染組件同樣可以包含自己的嵌套<router-view>
筐乳。
2.掛載
在router1.0中,掛載節(jié)點(diǎn)的方式為router.start()
而在router2.0中使用vue自己的$mount
手動(dòng)掛載
3.給link添加事件
在vue-router1中使用v-link
寫(xiě)入路由乔妈,但是在vue-router2中要使用router-link
寫(xiě)入路由蝙云,在瀏覽器渲染的時(shí)候會(huì)把router-link
渲染成a

有時(shí)候需要為router-link
注冊(cè)事件路召,對(duì)于一般的html元素勃刨,直接使用@click="eventFun"
即可波材,但是對(duì)于router-link
,像普通html元素那樣注冊(cè)事件后并不管用身隐,需要添加.native
才會(huì)成功注冊(cè)
廷区。
事實(shí)上給組件綁定原生事件就需要.native
修飾v-on
,否則無(wú)法注冊(cè)成功贾铝。
<my-component v-on:click.native="doTheThing"></my-component>

4.利用vue-router做導(dǎo)航
在利用vue-router做導(dǎo)航的時(shí)候隙轻,需要用到redirect
關(guān)鍵字的重定向功能,具體寫(xiě)法如下:
const router = new VueRouter({ routes : [ {path:'/',redirect:'/ZY'}, {path:'/ZY',component:ZY} ]});

Paste_Image.png

原文地址:http://mrzhang123.github.io/2017/02/07/vue2/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垢揩,一起剝皮案震驚了整個(gè)濱河市玖绿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌水孩,老刑警劉巖镰矿,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俘种,居然都是意外死亡秤标,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)宙刘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苍姜,“玉大人,你說(shuō)我怎么就攤上這事悬包⊙弥恚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵布近,是天一觀的道長(zhǎng)垫释。 經(jīng)常有香客問(wèn)我,道長(zhǎng)撑瞧,這世上最難降的妖魔是什么棵譬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮预伺,結(jié)果婚禮上订咸,老公的妹妹穿的比我還像新娘。我一直安慰自己酬诀,他們只是感情好脏嚷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瞒御,像睡著了一般父叙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天高每,我揣著相機(jī)與錄音屿岂,去河邊找鬼。 笑死鲸匿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阻肩。 我是一名探鬼主播带欢,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼烤惊!你這毒婦竟也來(lái)了乔煞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柒室,失蹤者是張志新(化名)和其女友劉穎渡贾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雄右,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡空骚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了擂仍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囤屹。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逢渔,靈堂內(nèi)的尸體忽然破棺而出肋坚,到底是詐尸還是另有隱情,我是刑警寧澤肃廓,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布智厌,位于F島的核電站,受9級(jí)特大地震影響盲赊,放射性物質(zhì)發(fā)生泄漏铣鹏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一角钩、第九天 我趴在偏房一處隱蔽的房頂上張望吝沫。 院中可真熱鬧,春花似錦递礼、人聲如沸惨险。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辫愉。三九已至,卻和暖如春将硝,著一層夾襖步出監(jiān)牢的瞬間恭朗,已是汗流浹背屏镊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痰腮,地道東北人而芥。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像膀值,于是被迫代替她去往敵國(guó)和親棍丐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容沧踏,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容歌逢。關(guān)于...
    云之外閱讀 5,046評(píng)論 0 29
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,204評(píng)論 0 6
  • 1.安裝 可以簡(jiǎn)單地在頁(yè)面引入Vue.js作為獨(dú)立版本,Vue即被注冊(cè)為全局變量翘狱,可以在頁(yè)面使用了秘案。 如果希望搭建...
    Awey閱讀 10,999評(píng)論 4 129
  • 下載安裝搭建環(huán)境 可以選npm安裝,或者簡(jiǎn)單下載一個(gè)開(kāi)發(fā)版的vue.js文件 瀏覽器打開(kāi)加載有vue的文檔時(shí)潦匈,控制...
    冥冥2017閱讀 6,033評(píng)論 0 42
  • 我說(shuō)我討厭甜甜圈因?yàn)樗妹利惖耐獗砥垓_了我的人民幣只換來(lái)甜的牙疼的冰奶油和干巴巴的面包 而我更愛(ài)面包皮阱高,你呢。 轉(zhuǎn)...
    她是加菲貓閱讀 216評(píng)論 0 0