当前位置:   article > 正文

axios使用,在vue中的使用(私有和全局,封装api接口模块)_npm i axios

npm i axios

axios 是一个专注于网络请求的库!

axios中文网|axios API 中文文档 | axios

目录

axios在HTML使用

1.axios基本使用

2.axios封装的六个属性

2.axios的基本使用(Promise对象await和async简化写法)

3.axios直接发起的GET和POST请求

axios在Vue中的使用

方法一:私有组件使用axios

1.先装包(npm i axios -S)

2.在组件内使用

方法二:全局配置axios请求根路径(Vue2)

1.在main.js文件(把axios挂载到Vue.prototype上)

1.1在基于vue-cli创建的vue2项目中

1.2在基于vite创建的Vue3项目中全局配置axios

2.在App.vue文件使用axios

方法三:请求根路径的封装文件reqest.js和api接口封装模块

1.在src目录创建utils文件夹,复用的方法等可以封装到这里,如请求根路径的封装文件request.js:

 2.在src目录下创建api文件,各种类型的api接口都可以封装到各个模块中

3.在需要使用调用接口方法的组件进行按需导入API接口,并封装请求接口的方法,在created生命周期进行调用

axios的请求回来的数据是个Promise对象

1.需要配合async和await进行使用,并对请求过来的进行解构赋值

2.如果需要对请求回来的res进行新数据和旧数据的拼接,则可以用到数组的扩展运算符...


axios在HTML使用

1.axios基本使用

  1. <script src="./lib/axios.js"></script>
  2. <script>
  3. // http://www.liulongbin.top:3006/api/getbooks
  4. // 1. 调用 axios 方法得到的返回值是 Promise 对象
  5. axios({
  6. // 请求方式
  7. method: 'GET',
  8. // 请求的地址
  9. url: 'http://www.liulongbin.top:3006/api/getbooks',
  10. // URL 中的查询参数
  11. params: {
  12. id: 1
  13. },
  14. // 请求体参数
  15. data: {}
  16. }).then(function(result) {
  17. console.log(result)
  18. })
  19. </script>

2.axios封装的六个属性

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qyi5oSJ772e,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qyi5oSJ772e,size_20,color_FFFFFF,t_70,g_se,x_16

2.axios的基本使用(Promise对象await和async简化写法)

 解构赋值后使用:重命名

  • 1.调用axios之后,使用async和await进行简化
  • 2.使用解构赋值,将axios封装的大对象中,把data属性解构出来
  •  3.把解构出来的data属性,使用冒号进行重命名,一般重命名为{data:res}
  1. <script src="./lib/axios.js"></script>
  2. <script>
  3. document.querySelector('#btnPost').addEventListener('click', async function() {
  4. /* 如果调用某个方法返回值是个promise实例,则前面可以加await
  5. await只能用在被async“修饰”的方法中 */
  6. const {
  7. data
  8. } = await axios({
  9. method: 'POST',
  10. url: 'http://www.liulongbin.top:3006/api/post',
  11. data: {
  12. name: 'zs',
  13. age: 20
  14. }
  15. })
  16. console.log(data)
  17. })
  18. document.querySelector('#btnGet').addEventListener('click', async function() {
  19. /* 解构赋值后使用:重命名
  20. 1.调用axios之后,使用async和await进行简化
  21. 2.使用解构赋值,将axios封装的大对象中,把data属性解构出来
  22. 3.把解构出来的data属性,使用冒号进行重命名,一般重命名为{data:res} */
  23. const {
  24. data: res
  25. } = await axios({
  26. method: 'GET',
  27. url: 'http://www.liulongbin.top:3006/api/getbooks',
  28. })
  29. console.log(res.data)
  30. })
  31. // $.ajax() $.get() $.post()
  32. // axios() axios.get() axios.post() axios.delete() axios.put()
  33. </script>

3.axios直接发起的GET和POST请求

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qyi5oSJ772e,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qyi5oSJ772e,size_20,color_FFFFFF,t_70,g_se,x_16

  1. <button id="btnGET">GET</button>
  2. <button id="btnPOST">POST</button>
  3. <!-- axios发get请求 -->
  4. <script src="./lib/axios.js"></script>
  5. <script>
  6. document.querySelector('#btnGET').addEventListener('click', async function() {
  7. /* axios.get('url地址',{
  8. //get参数
  9. params:{}
  10. }) */
  11. const {
  12. data: res
  13. } = await axios.get('http://www.liulongbin.top:3006/api/getbooks', {
  14. params: {
  15. id: 1
  16. }
  17. })
  18. console.log(res)
  19. })
  20. /* axios发post请求 */
  21. document.querySelector('#btnPOST').addEventListener('click', async function() {
  22. /* axios.post('url',{请求体格式}) */
  23. const {
  24. data: res
  25. } = await axios.post('http://www.liulongbin.top:3006/api/post', {
  26. name: 'zs',
  27. gender: '男'
  28. })
  29. console.log(res);
  30. })
  31. </script>

axios在Vue中的使用

方法一:私有组件使用axios

1.先装包(npm i axios -S)

2.在组件内使用

  1. <template>
  2. <div class="left-container">
  3. <h3>Right组件</h3>
  4. <button @click="postInfo">发起POST请求</button>
  5. <button @click="btnGetBooks">获取图书列表</button>
  6. </div>
  7. </template>
  8. <script>
  9. //导入axios
  10. import axios from 'axios'
  11. export default {
  12. methods: {
  13. // 点击按钮,获取图书列表数据
  14. async btnGetBooks () {
  15. const { data: res } = await axios.get('http://..../api/get')
  16. console.log(res)
  17. },
  18. async postInfo () {
  19. const { data: res } = await axios.post('http://..../api/post', { name: 'dilireba', age: 20 })
  20. console.log(res)
  21. }
  22. }
  23. }
  24. </script>

方法二:全局配置axios请求根路径(Vue2)

1.在main.js文件(把axios挂载到Vue.prototype上)

1.1在基于vue-cli创建的vue2项目中

把axios挂载到Vue.prototype上,供每个.vue组件使用,之后在每个.vue组件中发起请求,调用this.$http即可,不需要再导入,,但把axios挂载到vue原型上,不利于api接口的复用

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import axios from 'axios'
  4. Vue.config.productionTip = false
  5. /* 全局配置axios的请求根路径 */
  6. axios.defaults.baseURL = 'http://www.api'
  7. /* 把axios挂载到Vue.prototype上,供每个.vue组件使用 */
  8. Vue.prototype.$http = axios
  9. /* 之后在每个.vue组件中发起请求,调用this.$http即可,不需要再导入,
  10. 但把axios挂载到vue原型上,不利于api接口的复用 */
  11. new Vue({
  12. render: h => h(App)
  13. }).$mount('#app')

1.2在基于vite创建的Vue3项目中全局配置axios

在 main.js 入口文件中,通过 app.config.globalProperties 全局挂载 axios,其余步骤与vue2 相同
  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. /* 导入bootstrap样式表 */
  4. import './assets/css/bootstrap.min.css'
  5. import './index.css'
  6. /* 导入axios进行全局配置 */
  7. import axios from 'axios'
  8. const app=createApp(App)
  9. /* 配置请求的根路径 */
  10. axios.defaults.baseURL='https://www.escook.cn'
  11. /* 将 axios 挂载到全局,今后,每个组件中,
  12. 都可以直接通过this.$http 代替 axios 发起 Ajax 请求 */
  13. app.config.globalProperties.$http=axios
  14. app.mount('#app')

2.在App.vue文件使用axios

  1. <template>
  2. <div>
  3. <h1>App根组件</h1>
  4. <button @click="btnGetBooks">获取图书列表</button>
  5. <hr>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. methods: {
  11. // 点击按钮,获取图书列表数据
  12. async btnGetBooks () {
  13. const { data: res } = await this.$http.get('/api/get')
  14. console.log(res)
  15. }
  16. }
  17. }
  18. </script>

方法三:请求根路径的封装文件reqest.js和api接口封装模块

1.在src目录创建utils文件夹,复用的方法等可以封装到这里,如请求根路径的封装文件request.js:

  1. import axios from 'axios'
  2. const request = axios.create({
  3. // 指定请求的根路径
  4. baseURL: 'https://www.escook.cn'
  5. })
  6. export default request

axios.create()方法原理:

 2.在src目录下创建api文件,各种类型的api接口都可以封装到各个模块中

如:在api文件夹下创建 articleAPI.js 该模块用于封装文章相关的API接口

  1. // 文章相关API接口,都封装到这个模块中
  2. import request from '@/utils/request'
  3. // 向外按需导出一个API函数
  4. export const getArticleListAPI = function (_page, _limt) {
  5. return request.get('/articles', {
  6. // 请求参数
  7. params: {
  8. _page,
  9. _limt
  10. }
  11. })
  12. }

如:在api文件夹下创建 userAPI.js  该模块用于封装用户相关的API接口

  1. import request from '@/utils/request'
  2. // 接口调用,纯粹演示,没有提供该接口
  3. export const getUserInfoAPI = function () {
  4. return request.get('/user')
  5. }

3.在需要使用调用接口方法的组件进行按需导入API接口,并封装请求接口的方法,在created生命周期进行调用

  1. <script>
  2. // 按需导入API接口
  3. import { getArticleListAPI } from '@/api/articleAPI'
  4. export default {
  5. name: 'MyHome',
  6. data () {
  7. return {
  8. // 页码值
  9. page: 1,
  10. // 每页显示多少条数据
  11. limt: 10,
  12. // 获取的文章的数组
  13. artlist: [],
  14. }
  15. },
  16. methods: {
  17. // 封装获取文字列表数据的方法,将参数page和limt传进去
  18. async initArticleList () {
  19. const { data: res } = await getArticleListAPI(this.page, this.limt)
  20. //将请求过来的数据转存到data中的artlist中
  21. this.artlist=res
  22. },
  23. created () {
  24. //调用封装的获取数据方法
  25. this.initArticleList()
  26. }
  27. }
  28. </script>

axios的请求回来的数据是个Promise对象

1.需要配合async和await进行使用,并对请求过来的进行解构赋值

  1. async btnGetBooks () {
  2. const { data: res } = await axios.get('http://..../api/get')
  3. console.log(res)
  4. }

2.如果需要对请求回来的res进行新数据和旧数据的拼接,则可以用到数组的扩展运算符...

如:this.artlist = [...res, ...this.artlist]

  1. methods: {
  2. // 封装获取文字列表数据的方法
  3. async initArticleList (isRefresh) {
  4. const { data: res } = await getArticleListAPI(this.page, this.limt)
  5. if (isRefresh) {
  6. // 证明是下拉刷新,新数据在前,旧数据在后
  7. // this.artlist = [旧数据在后,新数据在前]
  8. this.artlist = [...res, ...this.artlist]
  9. this.isLoading = false
  10. } else {
  11. // 如果是上拉加载更多,那么应该是
  12. // this.artlist = [旧数据在前,新数据在后]
  13. this.artlist = [...this.artlist, ...res]
  14. this.loading = false
  15. }
  16. if (res.length === 0) {
  17. // 证明没有下一页数据了,直接把finished改成true
  18. this.finished = true
  19. }
  20. }
  21. }

main.js 入口文件中,通过 app.config.globalProperties 全局挂载 axios

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/873317
推荐阅读
相关标签
  

闽ICP备14008679号