init

首先要起一个项目,推荐用vue-cli安装

$ npm install -g vue-cli
$ vue init webpack demo
$ cd demo
$ npm install

demo 是这个示例项目的名字

现在看到目录结构如下

下面来稍微介绍下

build 目录是一些webpack的文件,配置参数什么的,一般不用动

src 源码文件夹,基本上文件都应该放在这里。

static 生成好的文件会放在这个目录下。

test 测试文件夹,测试都写在这里

.babelrc babel编译参数,vue开发需要babel编译

.editorconfig 看名字是编辑器配置文件,不晓得是哪款编辑器,没有使用过。

.eslintrc.js eslint配置文件,用以规范团队开发编码规范,大中型项目很有用

.gitignore 用来过滤一些版本控制的文件,比如node_modules文件夹

index.html 主页

package.json 项目文件,记载着一些命令和依赖还有简要的项目描述信息

README.md 介绍自己这个项目的,想怎么写怎么写。不会写就参照github上star多的项目,看人家怎么写的

下面我针对自己的需要修改一些配置。你可以根据自己的需要进行修改。

首先去写.eslintrc.js。在rules中加入 "indent": [1, 4, { "SwitchCase": 1 }]

因为我更喜欢4个空格表一个缩进,报警程度调整成1是因为build文件夹里有很多行是2个空格,草草的。

然后在index.html中的 <app></app> 改成 <div id="root"></div>

这个文件没有写入任何加载css和js的link,而依旧可以正常运行的秘诀在于webpack会在编译的时候重新调整这个文件,注入依赖,所以不用太担心。

好了,差不多了。进行下一步

添加依赖

我个人习惯写stylus,所以要加上预处理器,如果喜欢sass可以自行添加。

vue-router做前端路由管理,一个中大型项目必须要做路由管理!

vuex做数据管理,类似于flux的存在,没有vuex,中大型应用中的状态会把开发者搞死,绝对。

$ npm install --save vue-router vuex
$ npm install --save-dev stylus-loader babel-runtime

好了,到这里,依赖也加好了。剩下的就是写代码了?

不急,我先说下两个vue插件的介绍

vue-router 简明API

vue-router用起来非常的简单

入口文件( src/main.js ):

'use strict'
import Vue from 'vue' // 引入vue
import Router from 'vue-router' // 引入vue-router import App from './App' // 引入根组件
import routerMap from './router' // 引入路由表 Vue.use(Router) // 声明使用vue-router
const router = new Router() // 创建路由
routerMap(router) // 路由表引入 router.start(App, '#root') // 开启应用

看到缺了一个 ./router.js 文件,来,创建。

// src/router.js
'use strict' export default function (router) {
router.map({
'/': {
name: 'index',
component: require('./components/contents/hello.vue')
},
'/hi': {
name: 'hi',
// 按需加载
component: function (resolve) {
require(['./components/contents/hi.vue'], resolve)
}
}
})
}

好了,路由创建成功了,顺便还搞了个按需加载。

那么在模板文件中如何使用?

很简单的,就像这样就可以了。

<!-- src/components/contents/hello.vue -->
<a class="link" v-link="{name: 'hi'}">跳转到hi</a>

还有,告诉应用哪里需要路由转换

<!-- src/App.vue -->
<div class="container">
<router-view></router-view>
</div>

vuex 简明API

这里简要介绍一下状态管理的vuex

在src下创建一个文件夹叫做 vuex 。里面定义三个文件。

mutation-types.js 定义类型的

actions.js 操作,可以分解成多个文件

store.js 入口文件,在根组件调用,然后所有子组件可以共享数据。

modules/headers.js 只是例子用的,一个headers的操作,需要定义数据的状态和mutation。 action.js 只是分发操作。

这一块还是看源码比较容易懂。

// src/vuex/mutation-types.js
export const SET_HEADER_TITLE = 'SET_HEADER_TITLE'
// src/vuex/store.js
import Vue from 'vue'
import Vuex from 'vuex'
import headers from './modules/headers'
import createLogger from 'vuex/logger'
Vue.use(Vuex) Vue.config.debug = true const debug = process.env.NODE_ENV !== 'production' export default new Vuex.Store({
modules: {
headers
},
strict: debug,
moddlewares: debug ? [createLogger()] : []
})
// src/vuex/actions.js
import {
SET_HEADER_TITLE
} from './mutation-types' export const setTitle = makeAction(SET_HEADER_TITLE) function makeAction (type) {
return ({ dispatch }, ...args) => dispatch(type, ...args)
}
// src/vuex/modules/headers.js
import {
SET_HEADER_TITLE
} from '../mutation-types' const state = {
title: 'default'
} const mutations = {
[SET_HEADER_TITLE](state, newTitle) {
state.title = newTitle
}
} export default {
state,
mutations
}

我再说两个,一个挂载store,一个获取数据,触发操作。

挂载store

// src/App.vue
import store from './vuex/store'
import HeaderComponent from './components/header'
import FooterComponent from './components/footer'
export default {
store,
components: {
HeaderComponent,
FooterComponent
}
}

获取数据及操作

// src/components/header.vue
// 从vuex拿数据,然后渲染到页面上
// 如果需要修改可以调用setTitle
import { setTitle } from '../vuex/actions'
export default {
vuex: {
getters: {
title: state => state.headers.title
},
actions: {
setTitle
}
}
}

fetch

单页应用少不了服务端交互,别老用ajax了,换 fetch 吧,少年!

$ npm install --save isomorphic-fetch es6-promise
// src/vuex/actions.js
require('es6-promise').polyfill()
require('isomorphic-fetch')

我在示例代码中并没有写。

fetch用起来根本不会回忆ajax时代的。

stylus

在之前的文章中安利过很多次stylus了,各种方便,这里一笔带过,喜欢的同学自然会去找 文档

test

测试是非常重要的一环。要想以后不出乱子,一定要尽早写好测试。

示例代码中有少量测试,推荐看一下

Code

我还是决定不在文章里写代码了。

多端

vue创作的应用不仅可以跑在浏览器里,还可以通过 electron 以客户端的形式跑起来!

使用Vue构建中(大)型应用的更多相关文章

  1. vue项目中的常见问题

    总结了几个vue项目开发过程中遇到的常见问题,希望大家注意. 注:文末有福利! 一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader -- ...

  2. [转]Vue生态系统中的库

    Vue UI组件库 Vuex vux github ui demo:https://github.com/airyland/vux Mint UI 项目主页:http://mint-ui.github ...

  3. 【Vue.js游戏机实战】- Vue.js实现大转盘抽奖总结

    大家好!先上图看看本次案例的整体效果. 实现思路: Vue component实现大转盘组件,可以嵌套到任意要使用的页面. css3 transform控制大转盘抽奖过程的动画效果. 抽奖组件内使用钩 ...

  4. 如何在Vue项目中,通过点击DOM自动定位VScode中的代码行?

    作者:vivo 互联网大前端团队- Youchen 一.背景 现在大型的 Vue项目基本上都是多人协作开发,并且随着版本的迭代,Vue 项目中的组件数也会越来越多,如果此时让你负责不熟悉的页面功能开发 ...

  5. 使用Kylin构建企业大数据分析平台的4种部署方式

    本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...

  6. C字符串和C++中string的区别 &&&&C++中int型与string型互相转换

    在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作.以下是C字符串和C++中string的区别:   C字符串 string对象(C++) 所需的头文件名称 ...

  7. Vue 实例中的生命周期钩子

    Vue 框架的入口就是 Vue 实例,其实就是框架中的 view model ,它包含页面中的业务处理逻辑.数据模型等,它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻 ...

  8. 探索js原型链和vue构造函数中的奥妙

    这篇文章首先会讲到原型链以及原型链的一些概念,然后会通过分析vue的源码,来看一下vue的构造函数是如何被创建的,now we go! 一.什么是原型链? 简单回顾下构造函数,原型和实例的关系:   ...

  9. 分享我在 vue 项目中关于 api 请求的一些实现及项目框架

    本文主要简单分享以下四点 如何使用 axios 如何隔离配置 如何模拟数据 分享自己的项目框架 本文主要目的为以下三点 希望能够帮到一些人 希望能够得到一些建议 奉上一个使用Vue的模板框架 我只是把 ...

随机推荐

  1. POJ 2431Expedition

    Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Bein ...

  2. 从零开始山寨Caffe·叁:全局线程管理器

    你需要一个管家,随手召唤的那种,想吃啥就吃啥. ——设计一个全局线程管理器 一个机器学习系统,需要管理一些公共的配置信息,如何存储这些配置信息,是一个难题. 设计模式 MVC框架 在传统的MVC编程框 ...

  3. Leetcode Valid Number

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

  4. innerHTML 与 innerText 的区别

    innerHTML指的是从对象的起始位置到终止位置的全部内容,包括Html标签.innerText 指的是从起始位置到终止位置的内容,但它去除Html标签.同时,innerHTML 是所有浏览器都支持 ...

  5. aps.net cored 新概念

    Tag Helpers The EnvironmentTagHelper can be used to include different scripts in your views (for exa ...

  6. 《我爱背单词》 Alpha版 发布说明

    ——发布地址(baidu网盘) http://pan.baidu.com/s/15omtB ——简介  <我爱背单词>是一款英语单词记忆和管理辅助软件,旨在帮助广大考生在短期内攻克GRE. ...

  7. 错误信息:attempt to create saveOrUpdate event with null entity

    错误信息:attempt to create saveOrUpdate event with null entity; 这个错误网上答案比较多,我也不多说了. 我遇到的问题是在前台传过来的参数是nul ...

  8. 关于页面中table中相同的列自动合并

    代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  9. soui中,列表控件动态高度的使用注意

    1.listview的模板template中,需要增加defHeight属性,即默认高度,同时,不能出现itemHeight属性,否则动态高度会失效 2.数据适配器中,重写getViewDesired ...

  10. GAME AI Pro 1 第1章

    和钱康来合作翻译的AI PRO 1和2 系列,计划是一周一篇,先捡着有意思的翻,对那篇有兴趣也可以留言给我优先翻译,希望都翻译好后有机会成书吧,有兴趣一起翻译的也可以联系我. 游戏人工智能是什么( W ...