Vue.js基础教程:第十四章 Axios的使用

在Vue.js中,Axios是一个非常流行的HTTP库,用于向后端发送请求并处理响应。在本章中,我们将学习如何使用Axios进行GET、POST、PUT和DELETE请求,以及如何传递参数(Query,Params,Body)。为了更好地模拟后端接口,我们将使用json-server来创建一个模拟的REST API。

目录

  1. 安装和设置Axios

  2. json-server的使用

  3. GET请求

  4. POST请求

  5. PUT请求

  6. DELETE请求

  7. 传递请求参数(Query,Params,Body)

1. 安装和设置Axios

首先,我们需要在Vue.js项目中安装Axios。如果你还没有Vue项目,可以使用Vue CLI创建一个:

vue create my-vue-app
cd my-vue-app

接下来,安装Axios:

npm install axios

在项目的入口文件中(例如main.js),引入并设置Axios:

import Vue from 'vue';import App from './App.vue';import axios from 'axios';
Vue.prototype.$http = axios;new Vue({  render: h => h(App),
}).$mount('#app');

2. json-server的使用

json-server是一个快速生成REST API的工具,适合在开发环境中使用。安装json-server:

npm install -g json-server

创建一个db.json文件,作为我们的模拟数据库:

{  
"posts": 
    [
        { "id": 1, "title": "Hello World", "content": "This is my first post" },
        { "id": 2, "title": "Vue.js Tutorial", "content": "Learning Vue with Axios" }
      ]
    }

启动json-server:

json-server --watch db.json

json-server 默认在 http://localhost:3000上运行,你可以通过访问这个地址来使用生成的API。

3. GET请求

在Vue组件中,我们可以使用Axios发送GET请求来获取数据。创建一个新的Vue组件,例如PostList.vue:

<template>
  <div>
    <h1>Posts</h1>
    <ul>
      <li v-for="post in posts" :key="post.id">{{ post.title }} - {{ post.content }}</li>
    </ul>
  </div>
  </template>
  <script>
  export default {
      data() {    return {      posts: []
    };
  },
  mounted() {    
      this.$http.get('http://localhost:3000/posts')
      .then(response => {        
          this.posts = response.data;
      })
      .catch(error => {        
          console.error(error);
      });
  }
};
</script>

这个组件在挂载时发送一个GET请求,获取所有的文章数据并显示在页面上。

4. POST请求

POST请求用于向服务器发送新数据。创建一个新的Vue组件,例如CreatePost.vue:

<template>
  <div>
    <h1>Create Post</h1>
    <form @submit.prevent="createPost">
      <div>
        <label for="title">Title:</label>
        <input type="text" v-model="title" id="title">
      </div>
      <div>
        <label for="content">Content:</label>
        <textarea v-model="content" id="content"></textarea>
      </div>
      <button type="submit">Create</button>
    </form>
  </div>
  </template>
  <script>
  export default {
      data() {    
          return {      
              title: '',      content: ''
    };
  },  
  methods: {
    createPost() {      
        this.$http.post('http://localhost:3000/posts', {        
            title: this.title,        
            content: this.content
      })
      .then(response => {        
          console.log('Post created:', response.data);
      })
      .catch(error => {        
          console.error(error);
      });
    }
  }
};</script>

这个组件包含一个表单,用于创建新文章。当表单提交时,发送一个POST请求,将新文章的数据传递给服务器。

5. PUT请求

PUT请求用于更新已有的数据。创建一个新的Vue组件,例如EditPost.vue:

<template>
  <div>
    <h1>Edit Post</h1>
    <form @submit.prevent="editPost">
      <div>
        <label for="title">Title:</label>
        <input type="text" v-model="title" id="title">
      </div>
      <div>
        <label for="content">Content:</label>
        <textarea v-model="content" id="content"></textarea>
      </div>
      <button type="submit">Save</button>
    </form>
  </div>
  </template>
  <script>
  export default {  props: ['id'],
      data() {    
          return {      
              title: '',      content: ''
    };
  },
  mounted() {    
  this.$http.get(`http://localhost:3000/posts/${this.id}`)
      .then(response => {        
          this.title = response.data.title;        
          this.content = response.data.content;
      })
      .catch(error => {        
          console.error(error);
      });
  },  
  methods: {
    editPost() {      
        this.$http.put(`http://localhost:3000/posts/${this.id}`, {        
            title: this.title,        
            content: this.content
      })
      .then(response => {        
          console.log('Post updated:', response.data);
      })
      .catch(error => {        
          console.error(error);
      });
    }
  }
};</script>

这个组件获取文章的ID作为参数,并发送PUT请求更新该文章的数据。

6. DELETE请求

DELETE请求用于删除数据。我们可以在PostList.vue中添加删除功能:

<template>
  <div>
    <h1>Posts</h1>
    <ul>
      <li v-for="post in posts" :key="post.id">
        {{ post.title }} - {{ post.content }}        
        <button @click="deletePost(post.id)">Delete</button>
      </li>
    </ul>
  </div>
  </template>
  <script>
  export default {
      data() {    
          return {      
              posts: []
    };
  },
  mounted() {    
      this.fetchPosts();
  },  
  methods: {
    fetchPosts() {      
        this.$http.get('http://localhost:3000/posts')
            .then(response => {          
                this.posts = response.data;
        })
        .catch(error => {          
            console.error(error);
        });
    },
    deletePost(id) {      
    this.$http.delete(`http://localhost:3000/posts/${id}`)
        .then(() => {          
            this.fetchPosts();
        })
        .catch(error => {          
            console.error(error);
        });
    }
  }
};</script>

这个组件在每个文章旁边添加了一个删除按钮,用于发送DELETE请求删除该文章。

7. 传递请求参数(Query,Params,Body)

Query参数

Query参数用于在URL中传递参数。我们可以在GET请求中添加查询参数:

this.$http.get('http://localhost:3000/posts', {  
    params: {    
        author: 'John Doe'
  }
})
.then(response => {  
    this.posts = response.data;
})
.catch(error => {  
    console.error(error);
});

Params参数

Params参数用于在路径中传递参数,通常用于GET、PUT、DELETE请求。例如:

this.$http.get(`http://localhost:3000/posts/${this.id}`)
.then(response => {  
    this.title = response.data.title;  
    this.content = response.data.content;
})
.catch(error => {  
    console.error(error);
});
this.$http.put(`http://localhost:3000/posts/${this.id}`, {  
    title: this.title,  
    content: this.content
})
.then(response => {  
    console.log('Post updated:', response.data);
})
.catch(error => {  
    console.error(error);
});

Body参数

Body参数用于在请求体中传递参数,通常用于POST、PUT请求。例如:

this.$http.post('http://localhost:3000/posts', {  
    title: this.title,  content: this.content
})
.then(response => {  
    console.log('Post created:', response.data);
})
.catch(error => {  
    console.error(error);
});
this.$http.put(`http://localhost:3000/posts/${this.id}`, {  
    title: this.title,  
     content: this.content
})
.then(response => {  
    console.log('Post updated:', response.data);
})
.catch(error => {  
    console.error(error);
});

总结

Axios是Vue.js中进行HTTP请求的强大工具。通过GET、POST、PUT、DELETE请求,以及灵活地传递Query、Params和Body参数,你可以轻松实现与后端的交互。结合json-server,可以快速搭建模拟的REST API,方便进行开发和测试。

希望本章内容能帮助你全面掌握在Vue.js中使用Axios的方法。如果你有任何问题或建议,欢迎在评论区交流讨论。让我们共同学习,提升开发技能!

来源: 互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。

赞 ()

相关推荐

发表回复

评论列表

点击查看更多

    联系我们

    在线咨询: QQ交谈

    微信:13450247865

    邮件:451255340#qq.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    微信