「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据

这篇具有很好参考价值的文章主要介绍了「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要介绍两种在Vue中访问外部API获取数据的方式,通过让Vue通过项目外部的接口来获取数据,而不是直接由项目本身进行数据库交互,可以实现前端代码和后端代码的分离,让两个部分的代码编写更独立高效。

本系列前文传送门

  • 「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的HelloWorld项目
  • 「网页开发|前端开发|Vue」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转
  • 「网页开发|前端开发|页面布局」03 学会够用的CSS,实现任意你想要的页面布局
  • 「网页开发|前端开发|Vue」04 快速掌握开发网站需要的Vue基础知识
  • 「网页开发|前端开发|Vue」05 Vue实战:从零到一实现一个网站导航栏
  • 「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏

一、场景说明

我们的网站一般需要涉及到数据的展示,除了简单的个人信息网站,常见的比如博客网站、电商网站、视频网站、资讯网站等等,都是会涉及较多的数据,这些数据因为数量较多,会存储在数据库中以便于管理。而如果跟数据库进行交互的代码放在前端项目中,容易导致前端项目的代码过于复杂臃肿,在版本迭代中容易导致生产问题。

所以现在比较推崇的前后端分离的架构模式,就将数据处理部分单独放在另外的项目中,而前端项目专门负责在取到数据之后进行页面的渲染和数据的展示。

前端只通过跟后端约定好的数据接口来获取数据,于是我们就需要了解在前端的javascript代码中如何通过外部数据接口来获取数据的方式。本文将介绍两种在vue中访问外部接口的方式:

  • 通过axios发送请求
  • 通过fetch API发送请求

二、使用Axios获取接口数据

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。类似其他编程语言中的网络请求库。

安装Axios

为了使用这个库,我们需要先进行安装,运行如下命令即可:
npm i axios
如果是使用yarn进行包管理,可以运行:
yarn add axios

导入Axios

进到我们项目的入口src/main.js中,增加如下导入语句:

import axios from 'axios';
Vue.prototype.$http = axios;

然后我们就可以在我们项目的页面中获取数据并展示数据了。我们以首页为例,
我们将先在首页直接硬编码写两个内容卡片,后续使用访问数据接口的方式,改成将接口返回的数据渲染并展示成各个卡片,从而掌握数据接口的访问和展示流程和方式。

首先我们从element-ui中找到卡片组件的代码,然后在HelloWorld.vue中的<template>中增加如下代码:

        <div>
            <el-card class="box-card">
                <div slot="header" class="clearfix">
                    <span>卡片名称</span>
                </div>
                <div class="text item">
                    卡片内容
                </div>
            </el-card>
            <el-card class="box-card">
                <div slot="header" class="clearfix">
                    <span>卡片名称</span>
                </div>
                <div class="text item">
                    卡片内容
                </div>
            </el-card>
        </div>

并且增加如下样式<style>代码:

<style>
  .text {
    font-size: 14px;
  }

  .item {
    margin-bottom: 18px;
  }

  .clearfix:before,
  .clearfix:after {
    display: table;
    content: "";
  }
  .clearfix:after {
    clear: both
  }

  .box-card {
    width: 480px;
  }
</style>

回到浏览器,可以看到页面现在渲染内容如下
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue
我们看到两张卡片是竖向排列的,我们希望是横向排列,所以根据我们在页面布局中的介绍,我们可以修改元素的display值,如下:
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue
可以看到页面中的卡片已经顺利变成横向排列了:
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue

Axios获取数据

现在我们可以使用Axios获取外部数据来生成卡片了,我们可以找免费的外部API来实现,比如httpbin,或者是其他一些比如返回图书或电影的公共API等等。

因为Axiosjavascript包,数据获取也是javascript才能胜任的工作,所以数据获取的代码自然是写在<script>代码块中。在vue中我们定义方法是在export中用methods: {}标记,然后在{}中定义各个方法,如下:

<script>
export default {
    data() {
        return {
            posts: [],
        };
    },

    methods: {
        async getData() {
            try {
                const response = await this.$http.get(
                    "http://jsonplaceholder.typicode.com/posts"
                );
                // JSON格式的返回值会自行解析
                this.posts = response.data;
            } catch (error) {
                console.log(error);
            }
        },
    },
}
</script>

我们增加的这段代码只是对方法进行定义,还没有对方法进行调用。在什么时候调用方法取决于我们的需求,比如进入首页默认展示部分信息、或者网站提供搜索功能仅在用户进行搜索时进行数据获取等等。

如果我们希望在网站加载的时候就获取数据,那么我们可以用到之前介绍 Vue核心知识时提到的「Hook函数」,对应页面加载完毕的hook函数是created(),所以我们在<script>中进行如下代码改动:
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue

现在我们页面加载后就会获取数据,但是我们还没有增加将这些数据渲染成页面内容的代码,所以我们现在要来完成这个步骤。如果要提前验证数据请求是否成功,可以自行在getData()中增加console.log()方法将数据请求结果打印出来进行验证,数据返回的数据如下:

[
    {
        "userId": 1,
        "id": 1,
        "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
        "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
    }
]

根据我们在 Vue核心知识中介绍的,如果我们现在希望使用vue的便捷语法,在<div>中生成多个<el-card>,那么就需要在<el-card>标签中使用v-for指令,如下:
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue
然后我们回到浏览器,可以看到页面已经将请求到的posts数组中的各个元素都渲染成了单独的卡片,如下:
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue

样式调整

当然我们可以调整一下卡片的样式,比如缩小卡片的宽度,增加卡片之间的间距等等,如下:

.box-card {
    width: 300px;
    display: inline-block;
    margin: 1.5rem;
}

就可以得到如下调整后的样式:
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue

三、使用Fetch API获取接口数据

Fetch API是javascript中自带的一组API,提供了用于获取数据的接口方法。我们刚才使用的axios就是基于Fetch API封装的库。

我们获取数据使用的是Fetch API中的fetch()方法,方法与刚才使用axios基本一致,代码如下:

    methods: {
        async getData() {
            try {
                // axios 获取数据方法
                // const response = await this.$http.get(
                //     "http://jsonplaceholder.typicode.com/posts"
                // );
                // JSON格式的返回值会自行解析
                // this.posts = response.data;

                // Fetch API 获取数据方法
                const response = await fetch("http://jsonplaceholder.typicode.com/posts");
                this.posts = await response.json();

            } catch (error) {
                console.log(error);
            }
        },
    },

然后回到我们的浏览器页面,我们可以看到浏览器页面仍然成功地渲染出了数据,说明我们的数据请求是成功的,如下:
「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据,vue.js,前端,javascript,前端框架,vue

axios是封装的库,所以使用会更简单,而Fetch API是更基础的接口,所以使用更灵活,在实际开发中根据实际需求来选择即可。

明白了如何在Vue中访问外部接口获取数据,前后端分离就完成了一半,剩下的就是我们为项目开发后端接口提供数据,所以接下来我们将介绍后端开发的部分 (●ˇ∀ˇ●)

本系列下一篇文章传送门

  • 「网页开发|后端开发|Flask」08 python接口开发快速入门:技术选型&写一个HelloWorld接口

写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇文章来源地址https://www.toymoban.com/news/detail-705267.html

到了这里,关于「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue + Element UI 前端篇(十五):嵌套外部网页

    在有些时候,我们需要在我们的内容栏主区域显示外部网页。如查看服务端提供的SQL监控页面,接口文档页面等。 这个时候就要求我们的导航菜单能够解析嵌套网页的URL,并根据URL路由到相应的嵌套组件。接下来我们就讲解具体实现方案。 实现原理 1. 给菜单URL添加嵌套网页

    2024年02月08日
    浏览(41)
  • 后端SpringBoot+前端Vue前后端分离的项目(二)

    前言:完成一个列表,实现表头的切换,字段的筛选,排序,分页功能。 目录 一、数据库表的设计 二、后端实现 环境配置 model层  mapper层 service层  service层单元测试 controller层 三、前端实现 interface接口 接口api层 主要代码 效果展示 引入mybatis-plus依赖 MerchandiseDetailsService文

    2024年02月09日
    浏览(61)
  • 后端SpringBoot+前端Vue前后端分离的项目(一)

    前言:后端使用SpringBoot框架,前端使用Vue框架,做一个前后端分离的小项目,需求:实现一个表格,具备新增、删除、修改的功能。 目录 一、数据库表的设计 二、后端实现 环境配置 数据处理-增删改查 model层 mapper层 XML配置 Service层 controller层 单元测试 三、前后端交互 配置

    2024年02月10日
    浏览(70)
  • 若依vue(前后端分离版本)前端获取登录用户id

    1.找到user.js 2.在user.js中找到以下几个地方 属性:state{} 属性:mutations{} 函数:GetInfo() 3.在user.js中添加代码  4.在自己的页面中添加获取id的代码 在该若依的版本中,从下列目录找到,ruoyi-ui-src-store-modules-user.js 属性state在页面中的位置 还有mutations 最后是GetInfo方法 步骤三 到此

    2024年04月12日
    浏览(54)
  • 前后端服务器分离时,前端如何上传图片到前端服务器?

    当前后端服务器分离时,前端上传图片到前端服务器可以采用以下几种方式: 1. 直接上传到前端服务器:可以通过使用HTML的`input type=\\\"file\\\"`元素,让用户选择图片文件并直接上传到前端服务器。前端服务器可以使用后端提供的API接口处理上传请求,然后将图片保存到前端服务

    2024年04月27日
    浏览(54)
  • SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接

    系列文章: SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计 SpringBoot + Vue前后端分离项目实战 || 二:Spring Boot后端与数据库连接 SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接 SpringBoot + Vue前后端分离项目实战 || 四:用户管理功能实现 SpringBoot + Vue前后

    2024年02月12日
    浏览(71)
  • 【SpringBoot+Vue】全网最简单但实用的前后端分离项目实战笔记 - 前端

    配套视频地址:https://www.bilibili.com/video/BV1dG4y1T7yp/ 如果您需要原版笔记,请up喝口水,可以上我的淘宝小店 青菜开发资料 购买,或点击下方链接直接购买: 源码+PDF版本笔记 源码+原始MD版本笔记 感谢支持! 官网:https://nodejs.org 注意,node可以比我稍低,但不要更高 https://p

    2024年01月17日
    浏览(45)
  • ❤ 全面解析若依框架vue2版本(springboot-vue前后分离--前端部分)

    一般在vue项目public文件夹下命名为“favicon.ico” ❤ 处理步骤 第1步:将图标重命名为“favicon.ico”,并放在项目根目录 下。 第2步:然后在index.html中引入,title中修改页面标题。 第3步:修改build文件夹下 webpack .dev.conf.js和webpack.prod.conf.js文件中的内容。 第五步:重新已经成功

    2024年02月12日
    浏览(56)
  • SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[二]

    需求分析 效果图 思路分析 使用Vue3+ElementPlus 完成。 代码实现 修改ssm_vuesrcApp.vue 成如下形式, 会删除部分用不上的代码,增加 修改ssm_vuesrcviewsHomeView.vue , 删除ssm_vuesrccomponentsHelloWorld.vue 创建ssm_vuesrccomponentsHeader.vue 修改ssm_vuesrcApp.vue , 引入Header 组件 创建全局的global

    2024年02月13日
    浏览(44)
  • 前后端分离------后端创建笔记(07)表单验证

    4.1 定义一个方法  4.2 这里表单的数据在哪里,就是这个 4.3  this.userForm,这里能够让数据清空 6.1 有两种常规的验证,第一种是非空验证,另一种长度验证,这一种非常普遍,因此在ELEMTUI中做了一些封装,因此我们直接拿过来用就行,还有一种情况,像电子邮件,这种情况就

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包