Axios学习二(在Vue中使用Axios-基于webpack)

1 篇文章 0 订阅

一.环境搭建

在前端项目中安装axios,执行:cnpm i axios -S 命令,这样在package.json文件中的依赖devDependencies中多了一个"axios": "^0.19.0",配置。package.json所有配置如下所示:

{
  "name": "webpack-stady",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "build": "webpack",
    "dev": "webpack-dev-server --hot --open --contentBase src --port 8888"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.19.0",
    "jquery": "^3.4.1",
    "vue": "^2.6.10",
    "vue-router": "^3.0.6"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-stage-0": "^6.24.1",
    "css-loader": "^2.1.1",
    "file-loader": "^3.0.1",
    "html-webpack-plugin": "^3.2.0",
    "less": "^3.9.0",
    "less-loader": "^5.0.0",
    "style-loader": "^0.23.1",
    "url-loader": "^1.1.2",
    "vue-loader": "^15.7.0",
    "vue-template-compiler": "^2.6.10",
    "webpack": "^4.32.2",
    "webpack-cli": "^3.3.2",
    "webpack-dev-server": "^3.4.1"
  }
}

 

二、封装axios工具类

创建 api.js文件 如下:

import axios from 'axios'
import {getFormData} from './utils.js'

const instance = axios.create({
    baseURL: 'http://localhost:8080',
    timeout:3000
});

export function getRequest(url, params) {
    return instance.get(url, {
        params: params
    })
}

export function postRequest(url, params) {
    return instance.post(url, {
        data: params,
        transformRequest: [function (data, headers) {
            return getFormData(data);
        }]
    });

}

utils.js文件如下:

export function getFormData(param) {
    if (typeof param !== 'object') {
        console.info("传递的参数不是个对象!")
        return;
    }
    if (window.FormData) {
        let formData = new FormData();
        for (let field in param) {
            formData.append(field, param[field]);
        }
        return formData;
    } else {
        let paramArr = [];
        let index = 0;
        for (let field in param) {
            paramArr[index] = encodeURIComponent(field) + "=" + encodeURIComponent(param[field]);
            index++;
        }
        return paramArr.join("&");
    }

}

三、使用

App.vue页面如下

<template>
    <div>
        <h1>App组件</h1>
        <router-link to="/account">Account</router-link>
        <router-link to="/other">Other</router-link>
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: "App"
    }
</script>

<style scoped>

</style>

入口文件main.js如下

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

Vue.config.productionTip = true

import App from './App.vue'
import router from './router.js'

var app = new Vue({
    el: '#app',
    render: h => h(App),
    router
});

Other.vue页面如下

<template>
    <div>
        <ul>
            <li v-for="(value,key) in emp">
                {{key}}:{{value}}
            </li>
        </ul>
        <div class="box">

        </div>
    </div>
</template>

<script>
    import {getRequest, postRequest} from '../api.js'

    export default {
        name: "Other",
        data() {
            return {
                msg: 'hello !',
                emp: null
            }
        },
        methods: {
            getEmpByno() {
                getRequest("/empNo", {empno: '7369'})
                    .then(response => {
                        this.emp = response.data;
                        console.info(this.emp);
                    })
                    .catch(function (error) {
                        console.info(error);
                    })
                    .finally(function () {
                        console.info("不管前面执行的如何,这里都会执行到!");
                    });
            }
        },
        created() {
            //生命周期函数
            //实例已经在内存中创建,此时 data 和 methods 已经完成创建初始化可以调用
            this.getEmpByno();
        }
    }
</script>

<style scoped>
    .box {
        width: 400px;
        height: 300px;
        background: url("../images/fengjing.jpg");
    }
</style>

其他文件:router.js如下:

import VueRouter from 'vue-router'

import Account from './components/Account.vue'
import Other from './components/Other.vue'

import login from './components/login.vue'
import register from './components/Register.vue'

var router = new VueRouter({
    routes: [
        {path: '/', redirect: '/other'},
        {path: '/account', component: Account,
            children:[
                {path:'login',component:login},
                {path:'register',component:register}
            ]},
        {path: '/other', component: Other}
    ]
});

export default router

webpack配置和babel配置文件如下:webpack.config.js,.babelrc

const path = require('path');
var htmlWebpackPlugin = require("html-webpack-plugin");
var VueLoaderPlugin = require("vue-loader/lib/plugin");

module.exports = {
    entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, './dist'),
        filename: 'bundle.js'
    },
    plugins: [
        new htmlWebpackPlugin({
            template: path.resolve(__dirname, 'src/index.html'),//模板路径
            filename: 'index.html'
        }),
        new VueLoaderPlugin()
    ],
    module: {
        rules: [
            {test: /\.css$/, use: ['style-loader', 'css-loader']},
            {test:/\.less$/,use:['style-loader', 'css-loader','less-loader']},
            {test: /\.js$/, use: 'babel-loader', exclude: /node_modules/},
            {test:/\.(jpg|png|jpeg|gif|bmp)$/,use:'url-loader?limit=44706&name=[hash:8]-[name].[ext]'},
            { test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }, // 处理 字体文件的 loader
            {test: /\.vue$/, use: 'vue-loader'}
        ]
    }
};
{
  "presets": ["env", "stage-0"],
  "plugins": ["transform-runtime"]
}

四、启动执行

执行npm run dev  结果页面如下:

result

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值