项目作者: bailicangdu

项目描述 :
vue2 + vue-router + vuex 入门项目
高级语言: JavaScript
项目地址: git://github.com/bailicangdu/vue2-happyfri.git
创建时间: 2016-12-08T01:28:47Z
项目社区:https://github.com/bailicangdu/vue2-happyfri

开源协议:MIT License

下载


说明

非常简单的一个vue2 + vuex的项目,整个流程一目了然,麻雀虽小,五脏俱全,适合作为入门练习。

如果对您有帮助,您可以点右上角 “Star” 支持一下 谢谢! ^_^

或者您可以 “follow” 一下,我会不断开源更多的有趣的项目

如有问题请直接在 Issues 中提,或者您发现问题并有非常好的解决方案,欢迎 PR 👍

开发环境 macOS 10.12.3 Chrome 56 nodejs 6.10.0

这个项目主要用于 vue2 + vuex 的入门练习,另外推荐一个 vue2 比较复杂的大型项目,覆盖了vuejs大部分的知识点。目前项目已经完成。地址在这里

项目运行(nodejs 6.0+)

  1. # 克隆到本地
  2. git clone https://github.com/bailicangdu/vue2-happyfri.git
  3. # 进入文件夹
  4. cd vue2-happyfri
  5. # 安装依赖
  6. npm install yarn(推荐)
  7. # 开启本地服务器localhost:8088
  8. npm run dev
  9. # 发布环境
  10. npm run build

效果演示

demo地址(请用chrome手机模式预览)

移动端扫描下方二维码

路由配置

  1. import App from '../App'
  2. export default [{
  3. path: '/',
  4. component: App,
  5. children: [{
  6. path: '',
  7. component: r => require.ensure([], () => r(require('../page/home')), 'home')
  8. }, {
  9. path: '/item',
  10. component: r => require.ensure([], () => r(require('../page/item')), 'item')
  11. }, {
  12. path: '/score',
  13. component: r => require.ensure([], () => r(require('../page/score')), 'score')
  14. }]
  15. }]

配置actions

  1. import ajax from '../config/ajax'
  2. export default {
  3. addNum({ commit, state }, id) {
  4. //点击下一题,记录答案id,判断是否是最后一题,如果不是则跳转下一题
  5. commit('REMBER_ANSWER', id);
  6. if (state.itemNum < state.itemDetail.length) {
  7. commit('ADD_ITEMNUM', 1);
  8. }
  9. },
  10. //初始化信息
  11. initializeData({ commit }) {
  12. commit('INITIALIZE_DATA');
  13. }
  14. }

mutations

  1. const ADD_ITEMNUM = 'ADD_ITEMNUM'
  2. const REMBER_ANSWER = 'REMBER_ANSWER'
  3. const REMBER_TIME = 'REMBER_TIME'
  4. const INITIALIZE_DATA = 'INITIALIZE_DATA'
  5. export default {
  6. //点击进入下一题
  7. [ADD_ITEMNUM](state, payload) {
  8. state.itemNum += payload.num;
  9. },
  10. //记录答案
  11. [REMBER_ANSWER](state, payload) {
  12. state.answerid[state.itemNum] = payload.id;
  13. },
  14. /*
  15. 记录做题时间
  16. */
  17. [REMBER_TIME](state) {
  18. state.timer = setInterval(() => {
  19. state.allTime++;
  20. }, 1000)
  21. },
  22. /*
  23. 初始化信息,
  24. */
  25. [INITIALIZE_DATA](state) {
  26. state.itemNum = 1;
  27. state.allTime = 0;
  28. },
  29. }

创建store

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. import mutations from './mutations'
  4. import actions from './action'
  5. Vue.use(Vuex)
  6. const state = {
  7. level: '第一周',
  8. itemNum: 1,
  9. allTime: 0,
  10. timer: '',
  11. itemDetail: [],
  12. answerid: {}
  13. }
  14. export default new Vuex.Store({
  15. state,
  16. actions,
  17. mutations
  18. })

创建vue实例

  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. import routes from './router/router'
  4. import store from './store/'
  5. Vue.use(VueRouter)
  6. const router = new VueRouter({
  7. routes
  8. })
  9. new Vue({
  10. router,
  11. store,
  12. }).$mount('#app')