【學(xué)習(xí)記錄】vue 學(xué)習(xí)分享

ps: 因為公司業(yè)務(wù)需求,最近學(xué)習(xí)了一段時間Vue+node轨帜,關(guān)于哪個前端框架更好现喳,仁者見智,
這里列一下前端各框架性能對比 Vue vs React / Vue vs AngularJs

關(guān)于vue全家桶 vue-cli + vue-router + vuex + axios

一搪泳、 腳手架新建項目 vue-cli

# 全局安裝 vue-cli
$ npm install --global vue-cli
# 創(chuàng)建一個基于 webpack 模板的新項目
$ vue init webpack my-project
# 安裝依賴,走你
$ cd my-project
$ npm run dev
項目目錄

二蜕提、 Vue的路由 vue-router

vue-router在全家桶里面定位是什么呢? 前端路由森书、創(chuàng)建單頁應(yīng)用靶端!

# 摘自vue-router官方解釋
用 Vue.js + vue-router 創(chuàng)建單頁應(yīng)用谎势,是非常簡單的。
使用 Vue.js 杨名,我們已經(jīng)可以通過組合組件來組成應(yīng)用程序脏榆,
當(dāng)你要把 vue-router 添加進(jìn)來,我們需要做的是台谍,
將組件(components)映射到路由(routes)须喂,然后告訴 vue-router 在哪里渲染它們

vue的核心概念是組件(components),vue-router將組件(components)映射到路由(routes)趁蕊,然后告訴 vue-router 在哪里渲染它們坞生!

關(guān)于路由的使用

1、在App.vue中新建視圖 --- 渲染到哪


App.vue

2掷伙、 路由頁面(router/module/index)編寫路由 --- 渲染什么模塊


image.png

module1是己、module2分文件夾,是解決大型項目路由復(fù)雜的問題任柜。業(yè)務(wù)復(fù)雜度不高的可以直接把index.js文件拿出來

如果出現(xiàn)使用 ()=>import(@/component/index),加載組件報錯的問題卒废,可能是其他方式構(gòu)建的項目,沒有使用babel,或者缺少babel插件syntax-dynamic-import宙地,解決辦法參考: vue-router按需加載

3摔认、 路由配置好之后,路由怎么跳轉(zhuǎn)
路由按照上面的寫法就配置好了各個路由宅粥,那么在頁面之間需要路由跳轉(zhuǎn)怎么做呢参袱?

a. 標(biāo)簽導(dǎo)航 <router-link to="/foo">Go to Foo</router-link>
b. 編程式導(dǎo)航  $router.push()、$router.replace()

查看詳細(xì): vue-router

三、axios(vue-resource已經(jīng)不再維護(hù)蓖柔,vue2.0官方推薦使用axios)

Axios 是一個基于 promise 的 HTTP 庫辰企,可以用在瀏覽器和 node.js 中。

  • 從瀏覽器中創(chuàng)建 XMLHttpRequests
  • 從 node.js 創(chuàng)建 http 請求
  • 支持 Promise API
  • 攔截請求和響應(yīng)
  • 轉(zhuǎn)換請求數(shù)據(jù)和響應(yīng)數(shù)據(jù)
  • 取消請求
  • 自動轉(zhuǎn)換 JSON 數(shù)據(jù)
  • 客戶端支持防御 XSRF
//get
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

文檔地址: github 况鸣、中文翻譯

項目整合Axios的方法
1牢贸、全局注冊axios,適用于請求較少的項目
在main.js中加入如下代碼:

import axios from 'axios'
Vue.prototype.$http = axios
全局注冊

2镐捧、封裝

//新建一個JS命名為api
import axios from 'axios' 
//在api中導(dǎo)入axios
let base = '/v1'

//把整個項目的網(wǎng)絡(luò)請求都寫在這個文件中用export導(dǎo)出

export const getproduct = params => { return axios.get(`${base}/product/info/${params}`) }

//這樣寫方便管理整個項目的網(wǎng)絡(luò)請求
//在我們要是用這個請求時比如說getproduct

import {
    getproduct
  }from '../api/api';
export default {
  name: 'HelloWorld',
  data () {
    return {
      params:{}
    }
  },
  methods: {
    getProductList(){
      getproduct(this.params).then(result=>{
        console.log(result);
      })
    }
  }
}
//注意我們導(dǎo)出的時候用的是export 所以導(dǎo)入的時候必須帶{}

擴展:利用Aixos實現(xiàn)前端實現(xiàn)登錄攔截

跨域請求

跨域請求是web開發(fā)必須解決的一個問題潜索。搞不定沒有數(shù)據(jù),就只能GAMEOVER了懂酱。 看這里不焦急~

不同域名之間的訪問竹习,需要跨域才能正確請求×形跨域的方法很多整陌,通常都需要后臺配置
不過 Vue-cli 創(chuàng)建的項目,可以直接利用 Node.js 代理服務(wù)器瞎领,實現(xiàn)跨域請求【正向代理】

1泌辫、在 config>index.js 的 dev 中添加配置項 proxyTable:

  • '/api' 為匹配項
  • target 為被請求的地址
配置代理

參考:
Vue-cli 創(chuàng)建的項目如何跨域請求
前端開發(fā)如何獨立解決跨域問題 --- 這篇文章是標(biāo)題黨

Vue 知識點總結(jié)

vue 的核心思想是,數(shù)據(jù)驅(qū)動和組件化九默。

1震放、MVVM數(shù)據(jù)驅(qū)動,有別于傳統(tǒng)jq+bootstrap的技術(shù)棧驼修,代碼組織的時候殿遂,需要摒棄操作dom的想法,一切皆數(shù)據(jù)乙各!一切交互的操作墨礁,都是對數(shù)據(jù)的修改~


數(shù)據(jù)驅(qū)動

2、組件化耳峦,其實就是把頁面進(jìn)行分塊處理恩静,分成多個小塊,每個小塊就是一個組件妇萄,這樣可以形成組件的復(fù)用蜕企,而且提高開發(fā)效率。
把應(yīng)用根據(jù)功能拆分為一個個顆粒度合理的組件冠句,需要一些項目鍛煉轻掩。
擴展: 編寫良好的前端組件

組件樹

3、指令
文本{{ }} 懦底、 v-html唇牧、v-show罕扎、v-if、v-else丐重、v-if-else腔召、v-once、v-bind扮惦、v-for臀蛛、v-on、

區(qū)別點

a. v-if vs v-show

v-if 是“真正”的條件渲染崖蜜,因為它會確保在切換過程中條件塊內(nèi)的事件監(jiān)聽器和子組件適當(dāng)?shù)乇讳N毀和重建浊仆。

v-if 也是惰性的:如果在初始渲染時條件為假,則什么也不做——直到條件第一次變?yōu)檎鏁r豫领,才會開始渲染條件塊抡柿。

相比之下,v-show 就簡單得多——不管初始條件是什么等恐,元素總是會被渲染洲劣,并且只是簡單地基于 CSS 進(jìn)行切換。

一般來說课蔬,v-if 有更高的切換開銷囱稽,而 v-show 有更高的初始渲染開銷。因此购笆,如果需要非常頻繁地切換粗悯,則使用 v-show 較好虚循;如果在運行時條件很少改變同欠,則使用 v-if 較好。

b. v-for 列表渲染

# 當(dāng) Vue.js 用 v-for 正在更新已渲染過的元素列表時横缔,它默認(rèn)用“就地復(fù)用”策略铺遂。
# 如果數(shù)據(jù)項的順序被改變,Vue 將不會移動 DOM 元素來匹配數(shù)據(jù)項的順序茎刚,
# 而是簡單復(fù)用此處每個元素襟锐,并且確保它在特定索引下顯示已被渲染過的每個元素。
#  so. 列表渲染膛锭,被渲染組件要有唯一的key值粮坞,不應(yīng)該使用index作為key值,否則會產(chǎn)生bug
<div v-for="item in items" :key="item.id">
  <!-- 內(nèi)容 -->
</div>

:key="index" 復(fù)現(xiàn)bug

4初狰、修飾符
.prevent 莫杈、.stop 、.laze

5奢入、 組件通信 --- 數(shù)據(jù)的流動

  • 組件內(nèi)部通訊(data筝闹、computed)


    data/computed
  • 父組件 => 子組件 (props)
    當(dāng)子組件想訪問父組件的值的時候,我們可以通過子組件的props屬性,將父組件的值傳遞給子組件

單向數(shù)據(jù)流
Vue采用的是單向數(shù)據(jù)流方式关顷,數(shù)據(jù)只能從父組件流向子組件糊秆,
子組件不能修改父組件傳入的數(shù)據(jù),否則Vue會給與警告议双。
props
  • 子組件 => 父組件
    官網(wǎng)推薦的方法是在子組件中通過v-on綁定自定義事件來實現(xiàn)
    每個 Vue 實例都實現(xiàn)了事件接口痘番,即:
    使用 on(eventName) 監(jiān)聽事件 使用emit(eventName) 觸發(fā)事件
    這個的運行跟我們常用的dom原生的事件機制是一樣的。父組件注冊好監(jiān)聽事件平痰,當(dāng)子組件需要對父組件進(jìn)行操作的時候夫偶,調(diào)用觸發(fā)函數(shù),觸發(fā)事件觉增。
    代碼案例: Vue子組件傳值給父組件

  • 非父子組件的相互通信


    event bus

狀態(tài)管理模式 vuex

slot分發(fā)內(nèi)容

為了讓組件可以組合兵拢,我們需要一種方式來混合父組件的內(nèi)容與子組件自己的模板。這個過程被稱為內(nèi)容分發(fā) (即 Angular 用戶熟知的“transclusion”)逾礁。Vue.js 實現(xiàn)了一個內(nèi)容分發(fā) API说铃,參照了當(dāng)前 Web Components 規(guī)范草案,使用特殊的 <slot> 元素作為原始內(nèi)容的插槽嘹履。

    使用slot的好處就是可以定制個性化組件結(jié)構(gòu)
單個插槽
具名插槽

子組件將數(shù)據(jù)像props一樣腻扇,傳遞到父組件中,使得父組件根據(jù)數(shù)據(jù)映射視圖砾嫉,并插入到子組件slot的位置幼苛。。

這個功能太變態(tài)焕刮。舶沿。。 實在不明白這樣搞有什么用配并。括荡。。

vue知識點擴展:

vue技術(shù)棧擴展:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溉旋,一起剝皮案震驚了整個濱河市畸冲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌观腊,老刑警劉巖邑闲,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梧油,居然都是意外死亡苫耸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門婶溯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲸阔,“玉大人偷霉,你說我怎么就攤上這事『稚福” “怎么了类少?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渔扎。 經(jīng)常有香客問我硫狞,道長,這世上最難降的妖魔是什么晃痴? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任残吩,我火速辦了婚禮,結(jié)果婚禮上倘核,老公的妹妹穿的比我還像新娘泣侮。我一直安慰自己,他們只是感情好紧唱,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布活尊。 她就那樣靜靜地躺著,像睡著了一般漏益。 火紅的嫁衣襯著肌膚如雪蛹锰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天绰疤,我揣著相機與錄音铜犬,去河邊找鬼。 笑死轻庆,一個胖子當(dāng)著我的面吹牛癣猾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播榨了,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼煎谍,長吁一口氣:“原來是場噩夢啊……” “哼攘蔽!你這毒婦竟也來了龙屉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤满俗,失蹤者是張志新(化名)和其女友劉穎转捕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唆垃,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡五芝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辕万。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢步。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡沉删,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出醉途,到底是詐尸還是另有隱情矾瑰,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布隘擎,位于F島的核電站殴穴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏货葬。R本人自食惡果不足惜采幌,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望震桶。 院中可真熱鬧休傍,春花似錦、人聲如沸蹲姐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淤堵。三九已至寝衫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拐邪,已是汗流浹背慰毅。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扎阶,地道東北人汹胃。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像东臀,于是被迫代替她去往敵國和親着饥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 使用rest-assrued框架做接口自動化測試,框架的發(fā)掘來自于一次沙龍的學(xué)習(xí)赁濒,愿意更深入學(xué)習(xí)的同學(xué)可參考:ht...
    by小杰閱讀 2,400評論 0 4
  • 今天16團隊開大組會轨奄,討論團隊的走向。 團隊成員每個人都發(fā)言拒炎,都說有什么什么收獲挪拟。但是,在我看來击你,我認(rèn)為16團隊很...
    譚皓勻閱讀 477評論 0 3
  • Sir知道有人等這條稿子很久了。 該來的總會來惯雳。 恩—— 近日谷誓,《金剛:骷髏島》曝光首支預(yù)告花絮。 最大亮點吨凑,不是...
    Sir電影閱讀 3,317評論 8 23