Vue全家桶案例總結(jié)

自定義指令

官網(wǎng)指南

<div v-demo="{ color: 'white', text: 'hello!' }"></div>
Vue.directive('demo', function (el, binding) {
  console.log(binding.value.color) // => "white"
  console.log(binding.value.text)  // => "hello!"
});

項目中自定義滾動指令(main.js)

Vue.directive('scroll',{
  bind:function(el,binding){
    window.addEventListener('scroll',() => {
        let fnc = binding.value; // 該項目中綁定到函數(shù)
        fnc(el);
    })
  }
})

組件中使用

<div class="..." v-scroll="showTop">
  ...
  <div @click="gotop" class="go-top" :class="goTop?'active':''"></div>
  ...
</div>
methods: {
  gotop: function() {
    let speed = 10;
    let timer = setInterval(function(){
      if (document.body.scrollTop > 0){
        document.body.scrollTop = document.body.scrollTop - speed > 0 ? document.body.scrollTop - speed : 0;
        speed += 20;
      } else {
        clearInterval(timer);
      }
    }, 16)
  },
  showTop: function() {
    if(document.body.scrollTop > 200){
      this.goTop = true
    } else {
      this.goTop = false
    }
  },
}

Modules

使用單一狀態(tài)樹忽妒,導(dǎo)致應(yīng)用的所有狀態(tài)集中到一個很大的對象笛谦。但是,當(dāng)應(yīng)用變得很大時当凡,store 對象會變得臃腫不堪挤茄。為了解決以上問題如叼,Vuex 允許我們將 store 分割到模塊(module)。每個模塊擁有自己的 state穷劈、mutation笼恰、action、getters歇终。

cinema-modules

import * as types from '../types'

const state = {...};
const actions = {...};
const getters = {...};
const mutations = {...};

export default {
  state,
  actions,
  getters,
  mutations
}

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import cinema from './modules/cinema'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    cinema
  },
})

export default store;

跨域問題

有時候社证,本地使用webpack開啟一個node的dev端口,項目中使用vuejs去訪問別人家的api评凝,
比如豆瓣或者其他的api追葡,不使用jsonp肯定就會報跨域的問題。

解決方法:使用http-proxy-middleware插件

在vue-cli生成的build/dev-server.js中添加

app.use('/api',proxyMiddleware({
  target:'http://www.example.org',
  changeOrigin:true
}))

路由

響應(yīng)路由參數(shù)的變化

當(dāng)使用路由參數(shù)時奕短,例如從 /user/foo 導(dǎo)航到 user/bar宜肉,原來的組件實例會被復(fù)用。因為兩個路由都渲染同個組件篡诽,比起銷毀再創(chuàng)建崖飘,復(fù)用則顯得更加高效榴捡。 不過杈女,這也意味著組件的生命周期鉤子不會再被調(diào)用

復(fù)用組件時吊圾,想對路由參數(shù)的變化作出響應(yīng)的話达椰,你可以簡單地 watch(監(jiān)測變化) $route 對象。

const User = {
  template: '...',
  watch: {
    '$route' (to, from) {
      // 對路由變化作出響應(yīng)...
    }
  }
}

路由常用API

表達式 返回類型 意義
$route.name String 當(dāng)前路由的名稱
$route.path String 對應(yīng)當(dāng)前路由的路徑项乒,總是解析為絕對路徑
$route.params Object 一個 key/value 對象啰劲,包含了 動態(tài)片段 和 全匹配片段
$route.query Object 一個 key/value 對象,表示 URL 查詢參數(shù)檀何。/foo?user=1蝇裤,$route.query.user == 1

axios

axios基本用法參考

目前主流的 Vue 項目,都選擇 axios 來完成 ajax 請求频鉴,而大型項目都會使用 Vuex 來管理數(shù)據(jù)

cnpm install axios -S

安裝其他插件的時候栓辜,可以直接在 main.js 中引入并 Vue.use(),但是 axios 并不能 use类垦,只能每個需要發(fā)送請求的組件中即時引入

為了解決這個問題爬迟,有兩種開發(fā)思路土匀,一是在引入 axios 之后辐脖,修改原型鏈狭莱,二是結(jié)合 Vuex僵娃,封裝一個 aciton。

方案一:改寫原型鏈

首先在 main.js 中引入 axios

import axios from 'axios'

這時候如果在其它的組件中腋妙,是無法使用 axios 命令的默怨。但如果將 axios 改寫為 Vue 的原型屬性,就能解決這個問題

Vue.prototype.$http = axios

在 main.js 中添加了這兩行代碼之后辉阶,就能直接在組件的 methods 中使用 $http 命令

methods: {
 getMovies() {
  this.$http.get('url')
    .then(res => {
      console.log(res.data)
    })
    .catch(err => {
      console.log(err)
    })
  }
}

參考地址

小結(jié)

  1. 每個組件只能包含一個根節(jié)點
  2. actions彌補了mutations不能異步操作的缺陷
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末先壕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谆甜,更是在濱河造成了極大的恐慌垃僚,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件规辱,死亡現(xiàn)場離奇詭異谆棺,居然都是意外死亡,警方通過查閱死者的電腦和手機罕袋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門改淑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浴讯,你說我怎么就攤上這事朵夏。” “怎么了榆纽?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵仰猖,是天一觀的道長。 經(jīng)常有香客問我奈籽,道長饥侵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任衣屏,我火速辦了婚禮躏升,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狼忱。我一直安慰自己膨疏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布钻弄。 她就那樣靜靜地躺著佃却,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斧蜕。 梳的紋絲不亂的頭發(fā)上双霍,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼洒闸。 笑死染坯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丘逸。 我是一名探鬼主播单鹿,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼深纲!你這毒婦竟也來了仲锄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤湃鹊,失蹤者是張志新(化名)和其女友劉穎儒喊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體币呵,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡怀愧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了余赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芯义。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妻柒,靈堂內(nèi)的尸體忽然破棺而出扛拨,到底是詐尸還是另有隱情,我是刑警寧澤举塔,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布绑警,位于F島的核電站,受9級特大地震影響啤贩,放射性物質(zhì)發(fā)生泄漏待秃。R本人自食惡果不足惜拜秧,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一痹屹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枉氮,春花似錦志衍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惹悄,卻和暖如春春叫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工暂殖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留价匠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓呛每,卻偏偏與公主長得像踩窖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晨横,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

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

  • 運營狗工作日記: 作為招聘方洋腮,我關(guān)注的是人才能為公司做什么貢獻,而不會在意求職者期望獲得什么手形。很多朋友一再強調(diào)自己...
    yuaryant閱讀 334評論 0 1
  • 講一個古人“搬磚”的故事: 東晉名將陶侃遭人陷害啥供,被調(diào)到地方,每天他都會把一百塊磚頭搬到書房里库糠,傍晚再把這些磚頭搬...
    有趣文叔閱讀 1,051評論 0 1
  • 昨日去練琴滤灯,隔壁琴室里是一個母親和5歲左右的小女孩,母親在玩手機曼玩,小女孩看著樂譜鳞骤,歡快的敲著琴鍵,估計是見到旁邊亮...
    D018李靜閱讀 166評論 0 0