当前位置:首页 > 移动开发 > 正文

vue2.0 webpack vuerouter vuex axios构建项目基础

2024-03-31 移动开发

前言

本文讲解的是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; 

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

   

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/yidong/20374.html