vue總結(jié)

vue實(shí)例忿薇,vue根實(shí)例泽西,vue組件

實(shí)例:每個(gè) Vue 應(yīng)用都是通過用 Vue 函數(shù)創(chuàng)建一個(gè)新的 Vue 實(shí)例開始的旅敷。一個(gè) Vue 應(yīng)用由一個(gè)通過 new Vue 創(chuàng)建的根 Vue 實(shí)例癣亚,以及可選的嵌套的、可復(fù)用的組件樹組成

根實(shí)例:通過 new Vue 創(chuàng)建的實(shí)例猪钮,叫根 Vue 實(shí)例

組件:可復(fù)用的 Vue 實(shí)例品山,一個(gè)組件的 data 選項(xiàng)必須是一個(gè)函數(shù),兩種組件的注冊(cè)類型:全局注冊(cè)和局部注冊(cè)

根實(shí)例和組件實(shí)例的區(qū)別:

vue實(shí)例會(huì)比vue組件多出el和router屬性烤低,而vue組件的data會(huì)被要求必須是函數(shù)肘交,防止出現(xiàn)同種組件多實(shí)例共享同一個(gè)data的事情

組件的注冊(cè)

1、全局注冊(cè)

//注冊(cè)
Vue.component('component-a', { /* ... */ })
Vue.component('component-b', { /* ... */ })
Vue.component('component-c', { /* ... */ })

new Vue({ el: '#app' })

// 模板中使用
<div id="app">
  <component-a></component-a>
  <component-b></component-b>
  <component-c></component-c>
</div>

2扑馁、局部注冊(cè)
全局注冊(cè)往往是不夠理想的涯呻。比如,如果你使用一個(gè)像 webpack 這樣的構(gòu)建系統(tǒng)檐蚜,全局注冊(cè)所有的組件意味著即便你已經(jīng)不再使用一個(gè)組件了魄懂,它仍然會(huì)被包含在你最終的構(gòu)建結(jié)果中沿侈。這造成了用戶下載的 JavaScript 的無謂的增加闯第。

在這些情況下,你可以通過一個(gè)普通的 JavaScript 對(duì)象來定義組件:

var ComponentA = { /* ... */ }
var ComponentB = { /* ... */ }
var ComponentC = { /* ... */ }

new Vue({
  el: '#app',
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  }
})

3缀拭、在模塊系統(tǒng)中局部注冊(cè)

import ComponentA from './ComponentA'
import ComponentC from './ComponentC'

export default {
  components: {
    ComponentA,
    ComponentC
  },
  // ...
}

4咳短、基礎(chǔ)組件的自動(dòng)化全局注冊(cè)
若使用了 webpack (或在內(nèi)部使用了 webpack 的 [Vue CLI 3+])填帽,那么就可以使用 require.context 只全局注冊(cè)通用的基礎(chǔ)組件。這里有一份可以讓你在應(yīng)用入口文件 (比如 src/main.js) 中全局導(dǎo)入基礎(chǔ)組件的示例代碼咙好。記住全局注冊(cè)的行為必須在根 Vue 實(shí)例 (通過 new Vue) 創(chuàng)建之前發(fā)生

import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'

const requireComponent = require.context(
  // 其組件目錄的相對(duì)路徑
  './components',
  // 是否查詢其子目錄
  false,
  // 匹配基礎(chǔ)組件文件名的正則表達(dá)式
  /Base[A-Z]\w+\.(vue|js)$/
)

requireComponent.keys().forEach(fileName => {
  // 獲取組件配置
  const componentConfig = requireComponent(fileName)

  // 獲取組件的 PascalCase 命名
  const componentName = upperFirst(
    camelCase(
      // 獲取和目錄深度無關(guān)的文件名
      fileName
        .split('/')
        .pop()
        .replace(/\.\w+$/, '')
    )
  )

  // 全局注冊(cè)組件
  Vue.component(
    componentName,
    // 如果這個(gè)組件選項(xiàng)是通過 `export default` 導(dǎo)出的篡腌,
    // 那么就會(huì)優(yōu)先使用 `.default`,
    // 否則回退到使用模塊的根勾效。
    componentConfig.default || componentConfig
  )
})
單向數(shù)據(jù)流

所有的 prop 都使得其父子 prop 之間形成了一個(gè)單向下行綁定:父級(jí) prop 的更新會(huì)向下流動(dòng)到子組件中嘹悼,但是反過來則不行。這樣會(huì)防止從子組件意外變更父級(jí)組件的狀態(tài)层宫,從而導(dǎo)致你的應(yīng)用的數(shù)據(jù)流向難以理解杨伙。

額外的,每次父級(jí)組件發(fā)生變更時(shí)萌腿,子組件中所有的 prop 都將會(huì)刷新為最新的值限匣。這意味著你不應(yīng)該在一個(gè)子組件內(nèi)部改變 prop。如果你這樣做了毁菱,Vue 會(huì)在瀏覽器的控制臺(tái)中發(fā)出警告米死。

注意在 JavaScript 中對(duì)象和數(shù)組是通過引用傳入的,所以對(duì)于一個(gè)數(shù)組或?qū)ο箢愋偷?prop 來說贮庞,在子組件中改變變更這個(gè)對(duì)象或數(shù)組本身將會(huì)影響到父組件的狀態(tài)峦筒。

for in遍歷數(shù)組,index是字符串的0,1,2窗慎,不是數(shù)字勘天,所以arr[index]取不到對(duì)應(yīng)下標(biāo)的值
  不建議用for-in循環(huán)遍歷數(shù)組還有以下幾點(diǎn)原因:

? 代碼中的index不是數(shù)字,是字符串“0”捉邢、“1”脯丝、“2”,可能無意間進(jìn)行字符串的計(jì)算“2”+1=“21”等伏伐。

? 代碼可能按照隨機(jī)順序遍歷數(shù)組元素宠进。

來自 https://www.cnblogs.com/ja-clin/p/6556793.html

vue用props定義事件和emit定義事件如何選擇

組件設(shè)計(jì)初衷就是要配合使用的,最常見的就是形成父子組件的關(guān)系:組件 A 在它的模板中使用了組件 B藐翎。它們之間必然需要相互通信:父組件可能要給子組件下發(fā)數(shù)據(jù)材蹬,子組件則可能要將它內(nèi)部發(fā)生的事情告知父組件。然而吝镣,通過一個(gè)良好定義的接口來盡可能將父子組件解耦也是很重要的堤器。這保證了每個(gè)組件的代碼可以在相對(duì)隔離的環(huán)境中書寫和理解,從而提高了其可維護(hù)性和復(fù)用性末贾。

在 Vue 中闸溃,父子組件的關(guān)系可以總結(jié)為 prop 向下傳遞,事件向上傳遞。父組件通過 prop 給子組件下發(fā)數(shù)據(jù)辉川,子組件通過事件給父組件發(fā)送消息表蝙。看看它們是怎么工作的乓旗。

--結(jié)論:事假就應(yīng)該用emit

來自 https://segmentfault.com/q/1010000013883412

混入mixins

應(yīng)用場(chǎng)景:

混入 (mixins)定義了一部分可復(fù)用的方法或者計(jì)算屬性

混入對(duì)象可以包含任意組件選項(xiàng)府蛇。當(dāng)組件使用混入對(duì)象時(shí),所有混入對(duì)象的選項(xiàng)將被混入該組件本身的選項(xiàng)屿愚。

注意:

1汇跨、當(dāng)組件和混入對(duì)象含有同名選項(xiàng)時(shí),這些選項(xiàng)將以恰當(dāng)?shù)姆绞交旌献本唷1热缛欧ǎ瑪?shù)據(jù)對(duì)象在內(nèi)部會(huì)進(jìn)行淺合并 (一層屬性深度),在和組件的數(shù)據(jù)發(fā)生沖突時(shí)以組件數(shù)據(jù)優(yōu)先毅厚。

2塞颁、同名鉤子函數(shù)將混合為一個(gè)數(shù)組,因此都將被調(diào)用吸耿。另外祠锣,混入對(duì)象的鉤子將在組件自身鉤子之前調(diào)用。

3咽安、值為對(duì)象的選項(xiàng)伴网,例如 methods, components 和 directives,將被混合為同一個(gè)對(duì)象妆棒。兩個(gè)對(duì)象鍵名沖突時(shí)澡腾,取組件對(duì)象的鍵值對(duì)。

計(jì)算屬性的應(yīng)用場(chǎng)景

mathod需要主動(dòng)去調(diào)用

計(jì)算屬性類似于推送糕珊,源頭一變动分,計(jì)算屬性的結(jié)果就自動(dòng)變換,邏輯上不用關(guān)注數(shù)據(jù)變換红选,你一開始掉用后澜公,這種推送鏈接就建立了,始終自動(dòng)變換

計(jì)算屬性和$watch的區(qū)別

計(jì)算屬性是多個(gè)因素變化喇肋,影響一個(gè)結(jié)果變化坟乾,

$watch是一個(gè)因素變換,導(dǎo)致多個(gè)結(jié)果變換蝶防。watch不能監(jiān)聽數(shù)組和對(duì)象屬性的變化甚侣。需要用深度監(jiān)聽

watch: {

  itemArr: {

    handler (value, old) {

      console.log(value)  // 這里沒辦法使用this

    },

  deep: true

  }

}
下拉框回填時(shí),更改默認(rèn)值不生效间学,defaultVal = ""或者defaultVal = []

解決方案:聲明defaultVal =[null], 賦值時(shí)殷费,

this.$set(this.defaultVal, 0, record.type);

表格自動(dòng)添加序號(hào)

方法一:colums中印荔,增加屬性:customRender: (text, record, index) => index + 1,

方法二:colums中,增加屬性:scopedSlots: { customRender: "index" },同時(shí)模板中增加

<template slot="index" slot-scope="text, record, index">

                <span>{{ index + 1 }}</span>

            </template>
回調(diào)傳參@click="e => {clickElement(e, records)}"
異步加載的antd Tree組件宗兼,設(shè)置了 defaultExpandAll 為true但是不起作用

如果一個(gè)表單組件沒有value prop就可以稱為非受控組件

來自 http://www.reibang.com/p/f83e961b4d73

ref

給原生htmldom綁定ref,獲取的是該dom對(duì)象

給組件綁定ref氮采,this.$refs.xxx獲取的是當(dāng)前的組件對(duì)象

在DOM更新時(shí)殷绍,比如改變v-show的值,this.refs.xxx獲取不到該DOM鹊漠,比如一個(gè)input框默認(rèn)隱藏主到,在mounted中,顯示躯概,然后要求自動(dòng)獲取焦點(diǎn)登钥,不能直接this.refs.inputA.focus();。要使用下面的:

this.$nextTick(function() {

    this.$refs.inputA.focus();

})
樹形數(shù)據(jù)渲染&遞歸

組件調(diào)用組件本身

prop傳遞對(duì)象

(錯(cuò)誤理解)父組件傳遞的對(duì)象娶靡,只有在data中定義的對(duì)象屬性牧牢,在能傳遞到子組件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市姿锭,隨后出現(xiàn)的幾起案子塔鳍,更是在濱河造成了極大的恐慌,老刑警劉巖呻此,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轮纫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡焚鲜,警方通過查閱死者的電腦和手機(jī)掌唾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忿磅,“玉大人糯彬,你說我怎么就攤上這事〈兴” “怎么了情连?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)览效。 經(jīng)常有香客問我却舀,道長(zhǎng),這世上最難降的妖魔是什么锤灿? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任挽拔,我火速辦了婚禮,結(jié)果婚禮上但校,老公的妹妹穿的比我還像新娘螃诅。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布术裸。 她就那樣靜靜地躺著倘是,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袭艺。 梳的紋絲不亂的頭發(fā)上搀崭,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音猾编,去河邊找鬼瘤睹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛答倡,可吹牛的內(nèi)容都是我干的轰传。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼瘪撇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼获茬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倔既,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤锦茁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后叉存,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體码俩,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年歼捏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稿存。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞳秽,死狀恐怖瓣履,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情练俐,我是刑警寧澤袖迎,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站腺晾,受9級(jí)特大地震影響燕锥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悯蝉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一归形、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鼻由,春花似錦暇榴、人聲如沸厚棵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婆硬。三九已至,卻和暖如春奸例,著一層夾襖步出監(jiān)牢的瞬間彬犯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工哩至, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躏嚎,地道東北人蜜自。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓菩貌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親重荠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箭阶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344