vuejs初上手項目

  • 2019 年 12 月 4 日
  • 筆記

學習一個框架有兩個階段最難,一個是初期的入門,一個是後期的源碼閱讀。

雖然vue的官方文檔非常棒,在我讀完文檔之後還是會有一種感覺,知識點我都懂,然後呢?似乎大體知道該怎麼利用vue全家桶去搭建一個項目,但具體下筆又有點模糊。vue官方的腳手架並沒有將vue-router和vuex包括進去,所以我們需要自己去配置它們。雖然找了一堆的demo,但是都沒有達到我想要的效果。正好趁著自己接了一個小項目,拿來練手。

這個項目主要的作用是熟悉 vue vue-router vuex 在初期搭建項目的時候該怎麼配置,以及怎麼去互相配合,xx.vue文件該怎麼寫,如何創建和使用組件,vuex的state,mutations,actions,getters怎麼配合,形成一個完整的流程。

項目並不複雜,所以拿出來分享,希望對大家有幫助

源碼地址:https://github.com/bailicangdu/vue2-happyfri

路由配置

import App from '../App'    export default [{      path: '/',      component: App,      children: [{          path: '',          component: r => require.ensure([], () => r(require('../page/home')), 'home')      }, {          path: '/item',          component: r => require.ensure([], () => r(require('../page/item')), 'item')      }, {          path: '/score',          component: r => require.ensure([], () => r(require('../page/score')), 'score')      }]  }]

配置actions

import ajax from '../config/ajax'    export default {      addNum({ commit, state }, id) {          commit('REMBER_ANSWER', { id })          if (state.itemNum < state.itemDetail.length) {              commit('ADD_ITEMNUM', {                  num: 1              })          }      },        getData({ commit, state }) {          ajax('GET', 'http://operating-activities.putao.com/happyfriday?active_topic_id=4').          then(res => {              commit('GET_DATA', {                  res              })          })      },        initializeData({ commit }) {          commit('INITIALIZE_DATA')      }  }

mutations

const GET_DATA = 'GET_DATA'  const ADD_ITEMNUM = 'ADD_ITEMNUM'  const REMBER_ANSWER = 'REMBER_ANSWER'  const REMBER_TIME = 'REMBER_TIME'  const INITIALIZE_DATA = 'INITIALIZE_DATA'  const GET_USER_INFORM = 'GET_USER_INFORM'    export default {      [GET_DATA](state, payload) {          if (payload.res.httpStatusCode == 200) {              state.itemDetail = payload.res.topiclist;          }      },        [GET_USER_INFORM](state, payload) {          state.user_id = payload.res.users_id;      },        [ADD_ITEMNUM](state, payload) {          state.itemNum += payload.num;      },        [REMBER_ANSWER](state, payload) {          state.answerid[state.itemNum] = payload.id;      },        [REMBER_TIME](state) {          state.timer = setInterval(() => {              state.allTime++;          }, 1000)      },        [INITIALIZE_DATA](state) {          state.itemNum = 1;          state.allTime = 0;      },  }

創建store

import Vue from 'vue'  import Vuex from 'vuex'  import mutations from './mutations'  import actions from './action'      Vue.use(Vuex)    const state = {      level: '第一周',      itemNum: 1,      allTime: 0,      timer: '',      itemDetail: [],      answerid: {}  }    export default new Vuex.Store({      state,      actions,      mutations  })

創建vue實例

import Vue from 'vue'  import VueRouter from 'vue-router'  import routes from './router/router'  import store from './store/'    Vue.use(VueRouter)  const router = new VueRouter({      routes  })    new Vue({      router,      store,  }).$mount('#app')