前言

本文讲解的是vue2.0+webpack+vuerouter+vuex+axios构建项目基础

步骤
1、全局安装webpack,命令
npm install webpack -g

注意,webpack升级到4舍弃了不少组件,之前有次使用淘宝镜像丢失了不少模块,所以webpack大家尽量使用npm装。

2、安装vue脚手架
npm install vue-cli -g
3、运行cmd(开始-运行-cmd-回车)

比如你的目录要安装在E盘,在命令面板中就输入"e:"然后回车
cd到项目的指定目录

4、根据模板创建项目,命令
vue init webpack-simple 工程名字<工程名字不能用中文>

Project name 输入项目名称直接回车默认,其他的直接回车。

5、安装依赖
npm install

创建好的类目如下图所示

 
image.png
6、运行第一个vue项目,命令
npm run dev
 
image.png

运行完后会运行项目,并打开浏览器展示这个例子项目

7、安装vue-router,vuex,axios

axios相当于ajax,之前是用vue-resourse,不过现在这个模块不维护了,基本使用axios
vue-router是vue的路由
vuex是vue的状态管理,方便组件间通信
安装命令

npm install vue-router vuex axios --save-dev

会保存到package.json文件里,当代码上传别人下载后,可以使用npm install一次性把依赖全部装完

8、书写第一个组件

在src目录下新建一个component文件夹,新建组件文件firstcomponent.vue
firstcomponent.vue

<template>
<div id="firstcomponent">
<h1>第一个组件</h1>
<a href="javascript:void(0);">write by {{author}}</a>
</div>
</template>
<!-- the js -->
<script type="text/javascript">
export default{
data(){
return {
author:'yueziming'
}
}
} </script> <!-- the vue style-->
<style lang="scss"> </style>

<style lang="scss">在里面可以直接写sass语法,书写更快捷

9、使用组件

app.vue部分代码

<template>
<div id="app">
<img src="./assets/logo.png">
<h1>{{ msg }}</h1>
<firstComponent></firstComponent> <!--使用组件-->
<h2>Essential Links</h2>
<ul>
<li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
<li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
<li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
</ul>
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
</div>
</template> <script>
import firstComponent from './component/firstcomponent.vue'; //引入组件
export default {
name: 'app',
data () {
return {
msg: 'Welcome to first Vue.js Project'
}
},
components:{firstComponent} //注册组件
}
</script>
10、使用路由和vuex

1、先写入secondcomponent.vue这个组件,然后在main.js里面引入(加入代码)

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
import Vuex from 'vuex'
// import VueResource from 'vue-resource' //开启debug模式
Vue.config.debug = true;
Vue.use(VueRouter);
Vue.use(Vuex);
// Vue.use(VueResource);Y
const First = { template:'<div><h2>{{count}}</h2></div>',computed:{count(){return store.state.count}}};
import Second from './component/secondcomponent.vue'; const router = new VueRouter({
mode: 'history',
base: __dirname,
routes: [
{
path: '/first',
component: First
},
{
path: '/second',
component: Second
}
]
}) const store = new Vuex.Store({
state:{
count:0
},
mutations:{
increment(state){
state.count++;
}
}
}) store.commit('increment'); console.log(store.state.count) // -> 1 const app = new Vue({
el: '#app',
router:router,
store,
render: h => h(App)
}).$mount('#app');

注:在app.vue里面写入html路由代码,切换路由后组件会在这里展示

<router-link to="/first">点击跳到第一个路由</router-link>
<router-link to="/second">点击跳到第二个路由</router-link>
11、在secondcomponent.vue里使用vuex里面的数据

secondcomponent.vue

<template>
<div id="firstcomponent">
<h1>{{count2}}</h1>
<a href="javascript:void(0);">write by {{author}}</a>
</div>
</template>
<!-- the js -->
<script type="text/javascript">
export default{
data(){
return {
author:'yueziming',
count2:this.$store.state.count
}
}
}
</script> <!-- the vue style-->
<style> </style>

count2就是main.js里面的count

12、axios的使用

axios的使用格式为:
axios.get('/user',{
params:{
ID:12345
}
})
.then(function(response){
console.log(response);
})
.catch(function(err){
console.log(err);
});
get没有区别,但是post请求时后台接收不到数据
简单的给下我封装的axios解决post的方法

import esPromise from 'es6-promise';
import axios from 'axios';
import qs from 'qs'; esPromise.polyfill(); axios.defaults.timeout = 30000; //设置超时时间30秒
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; //配置请求头 axios.defaults.baseURL = 'http://172.1.1.1'; //POST传参序列化
axios.interceptors.request.use((config) => {
if(config.method === 'post'){
config.data = qs.stringify(config.data);
}
return config;
},(error) =>{
console.log("错误的传参");
return Promise.reject(error);
}); class Common{
constructor(){ }
}
ajaxLoading(){
let loading = document.createElement("div");
loading.setAttribute("id","loading");
loading.setAttribute("class","mask-loading");
let myBody = document.getElementsByTagName("body")[0];
myBody.appendChild(loading);
loading.innerHTML = '<div class="spinner"><div class="spinner-container container1"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container2"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container3"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div>加载中</div>';
}
ajaxLoadingStop(){
let loading = document.getElementById("loading");
loading .parentNode.removeChild(loading );
}
ajax(api,data,callBack){
let myData = data;
let self = this;
if(api.type == "get"){
self.ajaxLoading();
axios.get(api.url,{
params:myData.list
}).then((response)=>{
self.ajaxLoadingStop();
if (response.data.ResultCode == 6666) {
callBack && callBack(response.data);
} else {
prompt.tip(response.data.Message);
}
}).catch((error)=>{
self.ajaxLoadingStop();
if(error && error.message && error.message.indexOf('timeout')!=-1){
prompt.tip("访问超时");
}else{
prompt.tip("服务器通信异常");
}
})
}else{
self.ajaxLoading();
new Promise((resolve, reject) => {
axios.post(api.url,myData.list).then((response)=>{
self.ajaxLoadingStop();
if (response.data.ResultCode == 6666) {
callBack && callBack(response && response.data)
} else {
prompt.tip(response.data.Message);
}
}).catch((error)=>{
console.log(error);
self.ajaxLoadingStop();
if(error && error.message && error.message.indexOf('timeout')!=-1){
prompt.tip("访问超时");
}else{
prompt.tip("服务器通信异常");
}
})
})
}
}
}
export default Common;

这只是最简单的例子,供给大家入门,能搭出来后面就容易学

 
 

vue2.0+webpack+vuerouter+vuex+axios构建项目基础的更多相关文章

  1. Vue2.0+Webpack项目环境构建到发布

    前言:为什么要用webpack搭建项目呢,因为这个工具可以把目前浏览器不全部支持的ES6语法,通过打包工具生成所有浏览器都支持的单个JS文件. 参考: https://blog.csdn.net/u0 ...

  2. vue全家桶项目搭建(vue-cli 2.9.6+vue-router+vuex+axios)

    一.安装vue-cli + vue-router + vuex + axios 1.安装vue-cli 2.创建项目 3.安装vuex和axios 二.搭建项目目录结构,如下所示: 1.assets目 ...

  3. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

  4. Vue2.0+Webpack+Element+Axios+vueRouter技术栈使用过程总结

    搭建项目架构 目采用Webpack+Vue-router的架构方式,开始安装(一切操作都在windows系统上完成) 1.按Win+R,然后在文本框中输入cmd,回车打开命令行,输入vue-cli安装 ...

  5. Node + Express + vue2.0 + Webpack项目实践

    技术 Express.Vue.Vue-Router.Vue-Resource.Webpack Vue vue 的组件化思想和 React 很像,一个 vue 组件将 html.css 和 js 都写在 ...

  6. 基于 vue+vue-router+vuex+axios+koa+koa-router 本地开发全栈项目

    因为毕业设计要做基于Node服务器的项目,所以我就想着用刚学的vue作为前端开发框架,vue作为Vue.js应用程序的状态管理模式+库,axios基于promise用于浏览器和node.js的http ...

  7. Vue(七)整合vue-router&Vuex&Axios

    整合vue-router&Vuex 先创建工程 vue create vue-axios 然后选择 勾选 回车,出现是否使用history mode?选择y,代表URL地址里面不会出现#.选择 ...

  8. 模块化之Spring3.0 web fragment和gradle构建项目

      1.背景 模块化开发很久以前就开始普及的概念.但是到了企业实际情况中,真正把模块化作为系统架构的核心的不多.或者说对模块化有这个意识,但是具体到底该如何实现,有些模糊,同时也许因为项目紧.任务中. ...

  9. webpack 学习1 安装构建项目

    本文中使用的webpack版本是4+,请注意区分 node.js安装 node.js下载地址 选择较低版本的稳定版下载,下载完成后得到的是一个msi文件,点击安装即可 安装完毕以后新建一个文件夹,并在 ...

随机推荐

  1. Flutter 页面下拉刷新和上拉加载

    flutter_easyrefresh 正如名字一样,EasyRefresh很容易就能在Flutter应用上实现下拉刷新以及上拉加载操作,它支持几乎所有的Flutter控件.它的功能与Android的 ...

  2. OpenGL学习(3)——Shader(补)

    完成章节后练习. 练习 1. Adjust the vertex shader so that the triangle is upside down. #version 330 core layou ...

  3. Linux中移动,复制,删除,打包排除某个目录或文件

    移动,复制,删除排除某个文件或目录 cp !(file1|dir2) /data/ 复制文件到/data/,排除file1和dir2 mv !(file1|dir2) /data/ 移动文件到/dat ...

  4. Note 2: Complain

    Note 2: Complain 1. The collection of Linkun's [1]: 1.1suck If someone says that something sucks, th ...

  5. YUV RGB 格式转换

    第一个公式是RGB转YUV(范围0-255)时用的,第二个公式是用在YUV转换RGB(范围0-255)时用的.1. Y = ; U = -; V = ; 黑色:Y=16 ,U= V =128 红色:Y ...

  6. C#操作Memcached帮助类

    在VS中安装Memcached,直接在NuGet下搜索Memcached,选择第一个进行安装: 服务端资源下载地址:https://pan.baidu.com/s/1gf3tupl 接下来开始写程序, ...

  7. js的new Date兼容iOS和Android

    在写一个移动端的报名活动页面时,其中一个逻辑是:过了报名日期,“立即报名”按钮置灰,不允许报名:具体逻辑如下,在真机上测试的时候,Android端可以把按钮失效,iOS则是无法把按钮失效.后台返回的时 ...

  8. 洛谷 题解 P2502 【[HAOI2006]旅行】

    由于此题边数比较小,所以可以先给边排个序,然后跑m遍最小生成树,每跑一次删除一条边,找最优解. 防TLE技巧 把边按从小到大的顺序排好,那么只要当前无法联通,那么后面也无法联通 最优解找法 doubl ...

  9. 《MIT 6.828 Homework 1: boot xv6》解题报告

    本作业的网站链接:MIT 6.828 Homework 1: boot xv6 问题 Exercise: What is on the stack? While stopped at the abov ...

  10. 自动输入密码执行远程服务器上的java -version命令

    自动输入密码执行远程服务器上的java -version命令 for i in $(seq 1 253);do sshpass -p "W123hz" ssh weili@192. ...