赞
踩
1、在src下新建一个 utli文件夹 文件夹下新建一个request.ts文件,在此文件里写如如下代码
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios" //创建axsio 赋给常量service const service:AxiosInstance = axios.create({ baseURL:'', timeout:100000 }); // 添加请求拦截器 service.interceptors.request.use(function(config:AxiosRequestConfig):AxiosRequestConfig {//config是请求时的配置信息。 // 在发送请求之前做些什么 // 设置请求头 携带token const token:string | null = localStorage.getItem('token') if(token){ config.headers = config.headers || {} config.headers['XXXX'] = token } return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); }); // 添加响应拦截器 service.interceptors.response.use(function (response:AxiosResponse):AxiosResponse {//response参数是响应对象 // 对响应数据做点什么 return response; }, function (error) { // 对响应错误做点什么 return Promise.reject(error); }); export default service
2、在src下新建一个api文件夹 在api文件夹下新建一个ts文件
import request from '../utli/request'
export const loginApi =(data:{passworld:string,username:string}):Promise<Ajax.AjaxRsp> => request.post('/login',data)
3、在页面中写代码发请求
<template> <div class="loginBox"> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm" > <el-form-item label="用户名" prop="username"> <el-input v-model="ruleForm.username" placeholder="请输入用户名" ></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="ruleForm.passworld" placeholder="请输入密码" ></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm()" >登录</el-button > </el-form-item> </el-form> </div> </template> <script lang='ts'> import {Component, Vue, Ref} from 'vue-property-decorator' import { ElForm } from "element-ui/types/form"; import {loginApi} from '@/api/login' interface UserInfo{ username:string, passworld:string } interface RulesObj { required:boolean, message:string, trigger:string, } @Component({ components:{} }) export default class Login extends Vue{ @Ref('ruleForm') readonly ruleFormRef!:ElForm ruleForm:UserInfo={username:"",passworld:""} rules:{username:Array<RulesObj>,passworld:Array<RulesObj>}={ username:[ {required:true,message:"用户不能为空",trigger:"blur"} ], passworld:[ {required:true,message:"密码不能为空",trigger:"blur"} ] } submitForm(formName: string):void{ this.ruleFormRef.validate(async(valid: boolean) => { if(valid){ // 发送请求 let res:Ajax.AjaxRsp = await loginApi({ passworld:this.ruleForm.passworld, username:this.ruleForm.username }) if(res.errno===0){ //存token }else{ this.$message.error(res.errmsg) } } }) } } </script> <style scoped> .loginBox { width: 500px; margin: 50px auto; } </style>
ps: 上面代码中用到了一个Ajax.AjaxRsp
此处用到了命名空间
(1)在项目中找到shims-vue.d.ts文件 加上如下代码
declare global{
namespace Ajax{
interface AjaxRsp{
errno:number,
errmsg:string,
data:any
}
}
}
如图:
不用导出 在任何地方就可以使用了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。