Vue快速入門教程

Vue快速入門教程

目錄

Vue在2017年人氣一路上漲,越來越多的項目選用Vue.js進行開發,這與Vue本身的輕量、容易學習有很大的關係。並且可預測Vue這種的發展態勢還將持續上漲。所以作爲一個前端開發者來說,也應該學習學習這門技術讓自己不掉隊。

在經過一段時間自己的學習實踐,分享關於自己的理解,可以讓更多準備學習Vue的人可以快速入門少走些彎路。

以下將從幾方面介紹Vue,瞭解完這幾方面你對Vue就大概有一個骨架認識,再去學習就會容易得多。
- Vue是什麼及其特點
- vue的生命週期
- vue的響應式原理
- 網絡請求axios
- 路由router
- 狀態管理vuex


Vue是什麼及其特點

一、Vue.js是一套構建用戶界面的漸進式框架,也就是說你可以根據需要引入,不會在初始化就引入很多內容,簡單輕量。

二、 Vue是MVVM(Model,View,ViewModel)模型的框架。

三、Vue對應用使用組件化進行構建,組件小型,可複用,可以讓我們的代碼更加方便管理。

四、 Vue.js 使用了基於 HTML 的模板語法,允許開發者聲明式地將 DOM 綁定至底層 Vue 實例的數據。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循規範的瀏覽器和 HTML 解析器解析。
在底層的實現上, Vue 將模板編譯成虛擬 DOM 渲染函數。結合響應系統,在應用狀態改變時, Vue 能夠智能地計算出重新渲染組件的最小代價並應用到 DOM 操作上。

實例的生命週期

每個vue實例在被創建前都需要經過一系列的初始化過程,例如需要設置數據監聽、編譯模板、掛載實例到 DOM、在數據變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命週期鉤子的函數,給予用戶機會在一些特定的場景下添加他們自己的代碼。
理解vue的生命週期可以幫助我們在實際中進行開發。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
    <script src="http://unpkg.com/vue/dist/vue.js"></script>
    <script type="text/javascript">
        window.onload = function(){
            new Vue({
                el:'#box',
                data:{
                    msg:'welcome'
                },
                created:function(){
                    console.log('實例已經創建,msg變量還未渲染到模板')
                },
                mounted:function(){
                    console.log('已經掛載到模板上:msg變量渲染到模板')  
                },
                updated:function(){
                    console.log('實例更新啦')    
                },
                destroyed:function(){
                    console.log('銷燬啦')  
                }
            });
        }
    </script>
</head>
<body> 
    <div id="box">
        <input type="text" v-model="msg"><br/>
        {{msg}}
    </div>
</body>
</html>

vue的響應式原理

響應原理圖
說到Vue的特性就不得不說它的響應式系統了。
數據模型僅僅是普通的 JavaScript 對象。而當你修改它們時,視圖會進行更新。這使得狀態管理非常簡單直接,不過理解其工作原理同樣重要,這樣你可以迴避一些常見的問題。

如何追蹤變化?

當你把一個普通的 JavaScript 對象傳給 Vue 實例的 data 選項,Vue 將遍歷此對象所有的屬性,並使用 Object.defineProperty 把這些屬性全部轉爲 getter/setter。
用戶看不到 getter/setter,但是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化。
每個組件實例都有相應的 watcher 實例對象,它會在組件渲染的過程中把屬性記錄爲依賴,之後當依賴項的 setter 被調用時,會通知 watcher 重新計算,從而致使它關聯的組件得以更新。

網絡請求axios

vue2.0之後,就不再對vue-resource更新,而是推薦使用axios。在Vue中可以通過Axios進行網絡請請求。
Axios 是一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。

功能特性: 
-從瀏覽器中創建 XMLHttpRequests
- 從 node.js 創建 http 請求
- 支持 Promise API
- 攔截請求和響應
- 轉換請求數據和響應數據
- 取消請求
- 自動轉換 JSON 數據-
- 客戶端支持防禦 XSRF

更詳細的請右轉->axios的使用及中文說明

路由router

爲什麼需要用到router(路由)呢?
在vue中,我們是通過組件來組成應用程序的,我們需要控制頁面的跳轉呢?這時候vue-router就發揮作用了。

當你要把 vue-router 添加進來,我們需要做的是,將組件(components)映射到路由(routes),然後告訴 vue-router 在哪裏渲染它們。

route的兩個主要標籤有2個:
默認會被渲染成一個 <a> 標籤,所以我們可以用它來導航鏈接到哪個頁面;
用於將頁面(組件)渲染到標籤裏
如下:

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- 使用 router-link 組件來導航. -->
    <!-- 通過傳入 `to` 屬性指定鏈接. -->
    <!-- <router-link> 默認會被渲染成一個 `<a>` 標籤 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!-- 路由出口 -->
  <!-- 路由匹配到的組件將渲染在這裏 -->
  <router-view></router-view>
</div>

路由的使用我們需要配置,將組件映射到路由。

// 0. 如果使用模塊化機制編程,導入Vue和VueRouter,要調用 Vue.use(VueRouter)

// 1. 定義(路由)組件。
// 可以從其他文件 import 進來
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

// 2. 定義路由
// 每個路由應該映射一個組件。 其中"component" 可以是
// 通過 Vue.extend() 創建的組件構造器,
// 或者,只是一個組件配置對象。
// 我們晚點再討論嵌套路由。
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 3. 創建 router 實例,然後傳 `routes` 配置
// 你還可以傳別的配置參數, 不過先這麼簡單着吧。
const router = new VueRouter({
  routes // (縮寫)相當於 routes: routes
})

// 4. 創建和掛載根實例。
// 記得要通過 router 配置參數注入路由,
// 從而讓整個應用都有路由功能
const app = new Vue({
  router
}).$mount('#app')

// 現在,應用已經啓動了!

通過注入路由,我們可以用 this.$router 來訪問它,router中記錄了路徑的跳轉可以幫助我們進行頁面跳轉導航。

vue-router的官方文檔

狀態管理vuex

Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態。
每一個 Vuex 應用的核心就是 store(倉庫)

可以把它理解成類似一個全局的存儲對象。但是,Vuex 和單純的全局對象有以下兩點不同:
1. Vuex 的狀態存儲是響應式的。當 Vue 組件從 store 中讀取狀態的時候,若 store 中的狀態發生變化,那麼相應的組件也會相應地得到高效更新。
2. 你不能直接改變 store 中的狀態。改變 store 中的狀態的唯一途徑就是顯式地提交 (commit) mutation。這樣使得我們可以方便地跟蹤每一個狀態的變化,從而讓我們能夠實現一些工具幫助我們更好地瞭解我們的應用。
舉個例子:

//-----main.js start--------
import vuex from 'vuex'
import store from './store'
···
Vue.use(vuex)
···

new Vue({
  el: '#app',
  router,
  store,//將store掛載到根節點,把 store 對象提供給 “store” 選項,這可以把 store 的實例注入所有的子組件,且子組件能通過 this.$store 訪問到
  components: { App },
  template: '<App/>'
})
//-----main.js end--------

//-----store.js start--------
import Vue from 'vue'
import Vuex from 'vuex'
// import Axios from 'axios'

Vue.use(Vuex)
const store = new Vuex.Store({
    //state對象存放全部的應用層級狀態
  state: {
    unreadNews: []
  },
  //用來從 store 獲取 Vue 組件數據
  getters: {
    unreadNews: state => state.unreadNews
  },
  //Mutators:事件處理器用來驅動狀態的變化, mutation處理同步事務
  mutations: {
    addunreadNews (state, newData) {
      state.unreadNews.push(newData)
    },
    clearunreadNew (state) {
      state.unreadNews = [];
      console.log('清除數據clearunreadNew' + state.unreadNews)
    }
  }
  //action用於執行異步操作
  actions: {

  }
})
export default store
//-----store.js  end--------

//在組件中可以通過使用this.$store.state中獲取應用的狀態
<span class="newNum">[{{this.$store.state.unreadNews.length}}]</span>

//在組件中可以調用store.commit 方法,通過this.$store.commit('functionname',arg)修改store中的state,那麼當我們變更狀態時,監視狀態的 Vue 組件也會自動更新
methods:{
        changeUnReadyNews(){
          console.log('清除數據'+JSON.stringify(this.newmovicelist))
          this.$store.commit('clearunreadNew')
        }
      }

參考資料彙總:
vue中文文檔
vuex中文文檔
vue-router中文文檔
Axios中文說明
vue2.0源碼分析之理解響應式架構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章