7種Vue模式

1.處理加載狀態(tài)

在大型應(yīng)用程序中根盒,我們可能需要將應(yīng)用程序劃分為更小的塊,只有在需要時(shí)才從服務(wù)器加載組件壕翩。為了使這一點(diǎn)更容易涂乌,Vue允許你將你的組件定義為一個(gè)工廠函數(shù)艺栈,它異步解析你的組件定義。Vue只有在需要渲染組件時(shí)才會(huì)觸發(fā)工廠函數(shù)湾盒,并將緩存結(jié)果湿右,以便將來重新渲染。2.3版本的新功能是罚勾,異步組件工廠也可以返回一個(gè)如下格式的對(duì)象毅人。

const AsyncComponent = () => ({
  // 要加載的組件(應(yīng)為Promise)
  component: import('./MyComponent.vue'),
  // 異步組件正在加載時(shí)要使用的組件
  loading: LoadingComponent,
  // 加載失敗時(shí)使用的組件
  error: ErrorComponent,
  // 顯示加載組件之前的延遲吭狡。默認(rèn)值:200ms。
  delay: 200,
  // 如果提供并超過了超時(shí)丈莺,則會(huì)顯示error組件划煮。默認(rèn)值:無窮。
  timeout: 3000
})

通過這種方法场刑,你有額外的加載和錯(cuò)誤狀態(tài)般此、組件獲取的延遲和超時(shí)等選項(xiàng)蚪战。

2.廉價(jià)的“v-once”靜態(tài)組件

在Vue中渲染純HTML元素的速度非城O郑快,但有時(shí)你可能有一個(gè)包含大量靜態(tài)內(nèi)容的組件邀桑。在這種情況下瞎疼,你可以通過在根元素中添加 v-once 指令來確保它只被評(píng)估一次,然后進(jìn)行緩存壁畸,就像這樣贼急。

Vue.component('terms-of-service', {
  template: `
    <div v-once>
      <h1>Terms of Service</h1>
      ... a lot of static content ...
    </div>
  `
})

3.遞歸組件

組件可以在自己的模板中遞歸調(diào)用自己,但是捏萍,它們只能通過 name 選項(xiàng)來調(diào)用太抓。

如果你不小心,遞歸組件也可能導(dǎo)致無限循環(huán):

name: 'stack-overflow',
template: '<div><stack-overflow></stack-overflow></div>'

像上面這樣的組件會(huì)導(dǎo)致“超過最大堆棧大小”的錯(cuò)誤令杈,所以要確保遞歸調(diào)用是有條件的即(使用 v-if 最終將為 false

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

當(dāng)特殊屬性 inline-template 存在于一個(gè)子組件上時(shí)走敌,該組件將使用它的內(nèi)部?jī)?nèi)容作為它的模板,而不是將其視為分布式內(nèi)容逗噩,這允許更靈活的模板編寫掉丽。

<my-component inline-template>
  <div>
    <p>These are compiled as the component's own template.</p>
    <p>Not parent's transclusion content.</p>
  </div>
</my-component>

5.動(dòng)態(tài)指令參數(shù)

指令參數(shù)可以是動(dòng)態(tài)的。例如异雁,在 v-mydirective:[argument]=“value" 中捶障, argument 可以根據(jù)組件實(shí)例中的數(shù)據(jù)屬性更新!這使得我們的自定義指令可以靈活地在整個(gè)應(yīng)用程序中使用纲刀。

這是一條指令项炼,其中可以根據(jù)組件實(shí)例更新動(dòng)態(tài)參數(shù):

<div id="dynamicexample">
  <h3>Scroll down inside this section ↓</h3>
  <p v-pin:[direction]="200">I am pinned onto the page at 200px to the left.</p>
</div>
Vue.directive('pin', {
  bind: function (el, binding, vnode) {
    el.style.position = 'fixed'
    var s = (binding.arg == 'left' ? 'left' : 'top')
    el.style[s] = binding.value + 'px'
  }
})

new Vue({
  el: '#dynamicexample',
  data: function () {
    return {
      direction: 'left'
    }
  }
})

6.事件和鍵修飾符

對(duì)于 .passive.capture.once 事件修飾符示绊,Vue提供了可與 on 一起使用的前綴:

例如:

on: {
  '!click': this.doThisInCapturingMode,
  '~keyup': this.doThisOnce,
  '~!mouseover': this.doThisOnceInCapturingMode
}

對(duì)于所有其他的事件和鍵修飾符锭部,不需要專有的前綴,因?yàn)槟憧梢栽谔幚沓绦蛑惺褂檬录椒ā?/p>

7.依賴注入(Provide/Inject)

有幾種方法可以讓兩個(gè)組件在 Vue 中進(jìn)行通信耻台,它們各有優(yōu)缺點(diǎn)空免。在2.2版本中引入的一種新方法是使用Provide/Inject的依賴注入。

這對(duì)選項(xiàng)一起使用盆耽,允許一個(gè)祖先組件作為其所有子孫的依賴注入器蹋砚,無論組件層次結(jié)構(gòu)有多深扼菠,只要它們?cè)谕粋€(gè)父鏈上。如果你熟悉React坝咐,這與React的上下文功(context)能非常相似循榆。

// parent component providing 'foo'
var Provider = {
  provide: {
    foo: 'bar'
  },
  // ...
}

// child component injecting 'foo'
var Child = {
  inject: ['foo'],
  created () {
    console.log(this.foo) // => "bar"
  }
  // ...
}


翻譯自:https://medium.com,作者:Fotis Adamakis

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墨坚,一起剝皮案震驚了整個(gè)濱河市秧饮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泽篮,老刑警劉巖盗尸,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異帽撑,居然都是意外死亡泼各,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門亏拉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扣蜻,“玉大人,你說我怎么就攤上這事及塘∶梗” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵笙僚,是天一觀的道長(zhǎng)芳肌。 經(jīng)常有香客問我,道長(zhǎng)味咳,這世上最難降的妖魔是什么庇勃? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮槽驶,結(jié)果婚禮上责嚷,老公的妹妹穿的比我還像新娘。我一直安慰自己掂铐,他們只是感情好罕拂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著全陨,像睡著了一般爆班。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辱姨,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天柿菩,我揣著相機(jī)與錄音,去河邊找鬼雨涛。 笑死枢舶,一個(gè)胖子當(dāng)著我的面吹牛懦胞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凉泄,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼躏尉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了后众?” 一聲冷哼從身側(cè)響起胀糜,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒂誉,沒想到半個(gè)月后教藻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拗盒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年怖竭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陡蝇。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哮肚,靈堂內(nèi)的尸體忽然破棺而出登夫,到底是詐尸還是另有隱情,我是刑警寧澤允趟,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布恼策,位于F島的核電站,受9級(jí)特大地震影響潮剪,放射性物質(zhì)發(fā)生泄漏涣楷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一抗碰、第九天 我趴在偏房一處隱蔽的房頂上張望狮斗。 院中可真熱鬧,春花似錦弧蝇、人聲如沸碳褒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沙峻。三九已至,卻和暖如春两芳,著一層夾襖步出監(jiān)牢的瞬間摔寨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工怖辆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留是复,地道東北人沉填。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像佑笋,于是被迫代替她去往敵國和親翼闹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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