Vue 2.0初學後我的總結及分享

摘要:最近在上海找工做,發現Vue前景還不錯,因而就打算先學習一下(以前瞭解過,可是一直沒提到日程上)這篇隨筆當是爲了本身學習以後,作一個小的階段性總結。但願本文的內容對於剛開始接觸vue的朋友們有點幫助(曾經的我)。若有誤導之處,但願你們幫忙指出。javascript

正文:html

 

  1、Vue 2.0前端

    吐槽:目前市面上我所接觸過的前端框架有 Angular  React  Vue 固然還有一些其餘的,只是我都沒怎麼用過,很差多說。vue

        Angularjava

          我接觸的第一個前端框架,對數據有良好的處理,可是學起來入手還行,深刻的話成本大了一些。當時習慣使用JQuerynode

        的我換成了這個新鮮的玩意確實仍是用了一些時間,項目成型後,以爲用着還行。可是後來的Angular2.0 讓我完全的放棄了webpack

        Angular(我的想法),後來看到了移動端的熱潮,可是Angular用在移動端的話,顯得有些重了。這個時候React出現了。web

        React & React Nativevuex

          號稱僅次於原生的JS前端框架閃耀問世,因爲有了些以前Angular的基礎,學習這個要輕鬆一些,不得不說「盛名之下無api

        虛士」,視圖的組件化和響應式不管是開發仍是用戶體驗都是極好的。

        Vue

          Vue的出現,性能方面官網給出了很明確的數據,在這裏。 而放在第一位的作比較的就是React,可見其對React的

        重視程度,在有前兩個框架的基礎上,本就容易掌握的Vue,耗費的成本小的不少。更優的性能,更低的學習成本。

----------------來點正經的-----------------

官網的文檔很好,這裏只是記錄一下當初本身學習的一些疑惑。

1)關於組件化,一張圖解釋足以。

                  

2)什麼是「鉤子」 ?

 文檔裏屢次提到「鉤子」,「鉤子」 簡單理解就是「到何時,作什麼事」,好比生命週期鉤子,以下圖:

     生命週期鉤子  

 其中:mounted 就是頁面渲染完了以後,咱們能夠乾點什麼壞事。一看代碼就馬上明白了。

      

<script>
	import $ from 'webpack-zepto';
	export default {
		data () {
			return {
				topic: {},
				topicId: ''
			}
		},
		mounted () {
			this.topicId = this.$route.params.id;
			$.get('https://cnodejs.org/api/v1/topic/' + this.topicId, (d) => {
				if (d && d.data) {
					this.topic = d.data;
				}
			})
		}
	}
</script>

  咱們經過 mounted (頁面渲染完成後,即「到何時」) 這個「鉤子」,當頁面渲染完了以後,發起了一個請求(即「作什麼事」)

而後就會有一些列邪惡的事情。看到這裏,相信都能明白什麼是「鉤子」啦!明白了什麼是「鉤子」,對以後的學習頗有必要。

3)數據的傳遞(這很重要)

 父組件:        

<template>
    <div>
        <cn-slide :show-menu="show"></cn-slide> <!-- 這裏就是父組件 -->
    </div>
</template>
<script>
    import $ from 'webpack-zepto'
    import cnSlide from './slide'
    export default {
        data() {
            return {
                show: false
            };
        },
        components: {
            cnSlide
        }
    };
</script>

  子組件:就是 import cnSlide from './slide' 中的這個 slide 文件

 1. 父組件-->子組件

  這種傳值的方式很容易理解。

  首先:在父組件中,經過 v-bind (縮寫爲 「:」)命令,綁定一個屬性(即 prop,語義化比較容易理解),並傳入必定的值(也能夠是對象)

     關於如何傳入,上面的代碼已經給出了。

  而後:在子組件中經過 props 來接收,代碼以下:

<script>
    export default {
        replace: true,
        props: ['showMenu'],
        computed: {
            isShow: function() {
                return this.showMenu = false   //使用 this.  便可調用。與data同樣使用
            }
        }
                ...
    };
</script>

 2. 子組件-->父組件

  這個稍微有點難度了

  主要用到兩個方法便可:vm.$on 和 vm.$emit 上代碼:

// vm.$on("監控的方法名,字符串", callback) 用在父組件
// 這裏的 v-on 就至關因而$on, child-say = 監控的方法名, 
// listenToMyBoy = callback 
<comp-fa  v-on:childsay="listenToMyBoy"></comp-fa>
<p>Do you like me? {{childsay}}</p>

 methods: {
            listenToMyBoy: function (data){ //data 就是從子組件接收到的值
              this.childsay = data
            }
 }
// vm.$emit("父組件監控的方法名",要傳給父組件的參數)
// 這裏的 talk 只是爲了觸發 emit()
<button v-on:click="talk">I like you</button>
methods: {
      talk: function(){
        this.$emit('childsay',想要傳給父組件的數據data);
      }
 }

   3. 組件與組件間

  僅是爲了總結狀況才寫出來,文檔上也有寫到,複雜狀況的話就用 狀態管理模式 ,這裏只是略作解釋。

  

//這裏就直接引用官方代碼
//只是用了一個空的 Vue實例做爲中間介質,畢竟兩個平行的東西想要交集,就要藉助其餘東西。
//若是理解了 子組件 向 父組件傳值,這個也不難理解
var
bus = new Vue() // 觸發組件 A 中的事件 bus.$emit('id-selected', 1) //這裏的 1 做爲參數傳入下面的時間當中 // 在組件 B 建立的鉤子中監聽事件 bus.$on('id-selected', function (id) { // ... })

 

二  Vuex 的理解以及核心應用

  關於官方文檔必定要仔細閱讀,尤爲是每一部分的第一段話!!!尤爲是每一部分的第一段話!!!尤爲是每一部分的第一段話!!!

  1)Vuex是什麼?

    官網給的答案是 Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理模式,用個人理解就是 Vuex 就是處理數據的。(爲了體現咱們行業的層次,

有一個高端的名字也是能夠理解的),官方文檔中有解釋是怎麼處理數據的,一會用本身的理解(大白話)簡單講述一下。

  2)store

    Vuex應用的核心,"store" 基本上就是一個容器,它包含着你的應用中大部分的狀態(state)。這是官方的解釋。由於我不知道怎麼解釋這個東西

記住怎麼寫就得了。(畢竟是入門,又不是什麼從簡入繁)

  3)Vuex如何管理數據?

    1.state:惟一數據源  打個比方:state中定義一個x值,在整個應用中任意地方均可以取到。(代碼怎麼寫,官網很明確)

    2.getters:  就是計算屬性

    3.mutations:  更改state的惟一方法(只能同步,異步處理放在action中)。每一個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數 (handler)

事件類型 = 方法名,回調函數 = 方法

    4.actions:  處理mutations不能作的異步操做。其中 分發 就是 觸發

    5.modules:  將前面四個分紅modules = { state: { ... }, mutations: { ... }, actions: { ... }, getters: { ... } }  

簡單講: 將一隻雄鷹變成了若干只麻雀,但麻雀雖小、五臟俱全。放一塊兒仍是雄鷹!

Vuex說的比較少,由於看完文檔以後你再看這篇,多少會清晰一些。

 

    參照資料

    官網:https://cn.vuejs.org/v2/guide/

    Vuex 2.x: https://vuex.vuejs.org/zh-cn/  ( Vue 核心插件 )

    Vue-router 2.x: https://router.vuejs.org/zh-cn/  ( Vue 核心插件 )

相關文章
相關標籤/搜索