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

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

文章目录

  • 本系列前文传送门
  • 一、场景说明
  • 二、使用Axios获取接口数据
    • 安装Axios
    • 导入Axios
    • Axios获取数据
    • 样式调整
  • 三、使用Fetch API获取接口数据

本系列前文传送门

  • 「网页开发|前端开发|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>

回到浏览器,可以看到页面现在渲染内容如下
在这里插入图片描述
我们看到两张卡片是竖向排列的,我们希望是横向排列,所以根据我们在页面布局中的介绍,我们可以修改元素的display值,如下:
在这里插入图片描述
可以看到页面中的卡片已经顺利变成横向排列了:
在这里插入图片描述

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>中进行如下代码改动:
在这里插入图片描述

现在我们页面加载后就会获取数据,但是我们还没有增加将这些数据渲染成页面内容的代码,所以我们现在要来完成这个步骤。如果要提前验证数据请求是否成功,可以自行在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指令,如下:
在这里插入图片描述
然后我们回到浏览器,可以看到页面已经将请求到的posts数组中的各个元素都渲染成了单独的卡片,如下:
在这里插入图片描述

样式调整

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

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

就可以得到如下调整后的样式:
在这里插入图片描述

三、使用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);}},},

然后回到我们的浏览器页面,我们可以看到浏览器页面仍然成功地渲染出了数据,说明我们的数据请求是成功的,如下:
在这里插入图片描述

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

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

写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/127875.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink CDC 菜鸟教程 -环境篇

本教程将介绍如何使用 Flink CDC 来实现这个需求, 在 Flink SQL CLI 中进行,只涉及 SQL,无需一行 Java/Scala 代码,也无需安装 IDE。 系统的整体架构如下图所示: 环境篇 1、 准备一台Linux 2、准备教程所需要的组件 下载 flink-1.13.2 并将其解压至目录 flink-1.13.2 …

CSS学习笔记05

CSS笔记05 定位 position CSS 属性position - 用于指定一个元素在文档中的定位方式。top&#xff0c;right&#xff0c;bottom 和 left 属性则决定了该元素的最终位置。position 有以下常用的属性值&#xff1a; position: static; - 默认值。指定元素使用正常的布局行为&am…

Mojo 摸脚语言,似乎已经可以安装

文章原地址&#xff1a;https://i.scwy.net/it/2023/090821-mojo/ Mojo 吹得很凶&#xff0c;面向AI编程&#xff0c;甩Python几十条街&#xff0c;融资上亿.... 但无缘一试&#xff0c;在Win和Ubuntu上试都不能通过。 由 LLVM 和 Swift 编程语言的联合创始人 Chris Lattner…

想要精通算法和SQL的成长之路 - 课程表III

想要精通算法和SQL的成长之路 - 课程表III 前言一. 课程表III&#xff08;贪心优先队列&#xff09;1.1 优先选择截止时间更小的课程1.2 如果当前课程无法学习怎么办&#xff1f;1.3 优化 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表III&#xff08;贪心优先队列&…

安装程序报错“E: Sub-process /usr/bin/dpkg returned an error code (1)”的解决办法

今天在终端使用命令安装程序时出现了如下的报错信息。 E: Sub-process /usr/bin/dpkg returned an error code (1) 这种情况下安装什么程序最终都会报这个错&#xff0c;具体的报错截图如下图所示。 要解决这个问题&#xff0c;首先使用下面的命令进到相应的目录下。 cd /var/…

使用openWRT 配置SFTP 实现远程文件安全传输

文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务&#xff0c;并结合cpolar内网穿透&#xff0c;创建安全隧道映射22端口&#xff0c;实现在公网环境下远程OpenWRT SFTP&#xf…

生信豆芽菜-机器学习筛选特征基因

网址&#xff1a;http://www.sxdyc.com/mlscreenfeature 一、使用方法 1、准备数据 第一个文件&#xff1a;特征表达数据 第二个文件&#xff1a;分组信息&#xff0c;第一列为样本名&#xff0c;第二列为患者分组 第三个文件&#xff1a;分析基因名 2、选择机器学习的方…

PHP设备检验系统Dreamweaver开发mysql数据库web结构php编程计算机网页代码

一、源码特点 PHP设备检验系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址 https://download.csdn.net/download/qq_41221322/88306259 php设备检验系统1 …

企业应用系统 PHP项目支持管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 项目支持管理系统是一套完善的web设计系统 应用于企业项目管理&#xff0c;从企业内部的各个业务环境总体掌握&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php项目支撑管理系统2 二、功能介绍 (1)权限管理&#xff1…

深度学习-4-二维目标检测-YOLOv5理论模型详解

YOLOv5理论模型详解 1.Yolov5四种网络模型 Yolov5官方代码中&#xff0c;给出的目标检测网络中一共有4个版本&#xff0c;分别是Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。 YOLOv5系列的四个模型&#xff08;YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff09;在参数量和性…

进阶C语言-指针的进阶(中)

指针的进阶 &#x1f4d6;5.函数指针&#x1f4d6;6.函数指针数组&#x1f4d6;7.指向函数指针数组的指针&#x1f4d6;8.回调函数 &#x1f4d6;5.函数指针 数组指针 - 指向数组的指针 - 存放的是数组的地址 - &数组名就是数组的地址。 函数指针 - 指向函数的指针 - 存放的…

【react】Hooks原理和实战

前言 在最初学习react的时候&#xff0c;我们大部分会选择去扒一扒React的官方文档&#xff0c;看看他是什么&#xff0c;怎么使用的。而我却很好奇在文档里学习的第一个完整的组件是 类&#xff08;Class&#xff09;组件&#xff0c;但是在实际工作中我们看到项目中所声明的…

OpenCV 02(色彩空间)

一、OpenCV的色彩空间 1.1 RGB和BGR 最常见的色彩空间就是RGB, 人眼也是基于RGB的色彩空间去分辨颜色的. OpenCV默认使用的是BGR. BGR和RGB色彩空间的区别在于图片在色彩通道上的排列顺序不同. 显示图片的时候需要注意适配图片的色彩空间和显示环境的色彩空间.比如传入的图片…

瑞吉外卖第二天

问题分析 前面我们已经完成了后台系统的员工登录功能开发&#xff0c;但是目前还存在一个问题&#xff0c;接下来我们来说明一个这个问题&#xff0c; 以及如何处理。 1). 目前现状 用户如果不登录&#xff0c;直接访问系统首页面&#xff0c;照样可以正常访问。 2). 理想…

Redux中间件源码解析与实现

基本介绍 本文中涉及到的关键npm包的版本信息如下&#xff1a; react 的版本为18.2.0 redux的版本为4.1.2 redux-thunk版本为2.4.2 redux-promise版本为0.6.0 redux-logger版本为3.0.6 在Redux源码解析与实现&#xff08;一&#xff09;Redux源码解析与实现&#xff08;二&…

基于任务队列的机器学习服务实现

将机器模型部署到生产环境的方法有很多。 常见的方法之一是将其实现为 Web 服务。 最流行的类型是 REST API。 它的作用是全天候&#xff08;24/7&#xff09;部署和运行&#xff0c;等待接收来自客户端的 JSON 请求&#xff0c;提取输入&#xff0c;并将其发送到 ML 模型以预测…

词!自然语言处理之词全解和Python实战!

目录 一、为什么我们需要了解“词”的各个方面词是语言的基础单位词的多维特性词在NLP应用中的关键作用 二、词的基础什么是词&#xff1f;定义分类 词的形态词根、词干和词缀形态生成 词的词性 三、词语处理技术词语规范化定义方法 词语切分&#xff08;Tokenization&#xff…

网络安全合规-DSMM

DSMM&#xff08;Data Security Management Model&#xff09;是一种数据安全管理模型。该模型以数据为中心&#xff0c;从数据的生命周期入手&#xff0c;从数据发布、使用、共享、存储、删除等几个方面来管理数据安全。 DSMM提供了一些有效的数据安全管理原则和策略&#xf…

用通俗易懂的方式讲解大模型分布式训练并行技术:数据并行

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

文生图模型进化简史和生成能力比较——艺术肖像篇

很久没有更新文章&#xff0c;最近真的太忙啦&#xff0c;在T2I领域&#xff0c;学习速度真的赶不上进化速度&#xff01;每天都有无数新模型、新插件、新玩法涌现。玩得太上瘾啦。 上月初我去参加我硕士专业的夏季烧烤大趴&#xff0c;跟我的论文导师重逢&#xff08;好多年没…