四、网络请求与路由

一、网络请求

1、Axios请求

Axios是一个基于promise的网络请求库

(1)安装

npm install --save axios

(2)引入

import axios from "axios"全局引入
import axios from "axios"
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App);
app.config.globalProperties.$axios = axios;
app.mount('#app');// 调用方式 this.$axios

(3)网络请求基本示例

get请求

axios({method: "get",url:"http://xxx.com"
}).then(res => {console.log(res.data);
})

post请求
参数需要处理为字符串
安装依赖 npm install --save querystring
引入:import qs from “querystring”
使用:qs.stringify({})

axios({method: "post",url:"http://xxx.com/xxx",data:{id:"xxx"}
}).then(res => {console.log(res.data);
})

(4)快捷请求

get请求

axiso.get("http://xxx.com/xxx").then( res=>{console.log(res.data);} )

post请求

axiso.post("http://xxx.com/xxx", qs.stringify({ id:"xxx" })).then( res=>{console.log(res.data);} )

二、网络请求封装

1、网络请求封装

创建js文件(在/src/utils)request.js
import axios from "axios"
import querystring from "querystring"// 创建网络对象
const instance = axios.create({// 配置网络请求公共参数timeout:3000
})// 请求拦截,发送之前的注册
instance.interceptors.request.use(config = >{ // 请求成功if(config.methods === "post"){config.data = qs.stringify(config.data){// config包括网络请求所有信息return config;},error =>{ //请求失败return Promise.reject(error);}
)// 响应拦截,获取数据之前
instance.interceptors.response.use(response =》{return response.status === 200 ? Promise.resolve(response) : Promise.reject(response)},error =>{ //请i去失败const { response } = error;console.log(response.status);{
{

2、接口调用

创建文件:path.js(或者base.js)j 和 index.js
// path.js
const base ={baseUrl: "http://xxx.com",path1:"/api/aaa"
}
// index.js
import axios from "../utils/request"
impoer path from "./path"const api = {getPath1(){return axios.get(path.baseUrl + path.path1);}
}const default api
// vue文件
import api from "../api/index"export default{......mounted(){api.getPath1().then( res =?{console.log(res.data);})}
}

三、跨域问题解决

1、问题原有

js采用的时同源策略,浏览器只允许js代码请求和当前服务器的域名、端口、协议相同的数据接口的数据。当协议、域名、端口,任意一个不相同时,就会产生跨域问题。

在这里插入图片描述

2、解决方案proxy

(1)修改配置

// vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,devServer: {proxy: {"/api": {target: "https://ip.cn",changeOrigin: true}}}
})

(2)将请求地址前面的域名删除,之后重启

this.$axios({methos: "get",url: "/api/index?ip=&type=0"}).then(res => {console.log(res.data);})

三、vue引入路由配置(页面跳转)

1、创建附带路由的项目

Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to 
proceed)(*) Babel( ) TypeScript(*) Progressive Web App (PWA) Support
>(*) Router	//路由选项( ) Vuex( ) CSS Pre-processors( ) Linter / Formatter( ) Unit Testing( ) E2E Testing

2、使用路由

(1)使用路由

<!-- vue-router\src\App.vue -->
<template><router-link to="/">首页</router-link> |<router-link to="/about">关于</router-link><router-view></router-view>
</template><style></style>

(2)配置路由

// vue-router\src\router\index.js
import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'const routes = [{path: '/',name: 'home',component: HomeView},{path: '/about',name: 'about',// 异步加载,没有被点击不会加载component: () => import("../views/AboutView.vue")}
]const router = createRouter({/*** createWebHashHistory*      home:http://localhost:8080/#/*      about:http://localhost:8080/#/about* *  原理:a标签锚点连接*//*** createWebHistory*      home:http://localhost:8080/*      about:http://localhost:8080/about* 此种方式,需要后台配合做重定向,否则会出现404问题* * 原理:H5 pushState()*/history: createWebHashHistory(),routes
})export default router

(3)主页内容

<!-- vue-router\src\views\HomeView.vue -->
<template><div><h1>主界面</h1></div>
</template><script>export default {name: 'HomeView'
}
</script>

(4)关于页面内容

<!-- vue-router\src\views\AboutView.vue -->
<template><div><h1>关于页面</h1></div>
</template><script>
export default {name: 'AboutView'
}
</script>

四、路由传递参数

1、在路径中指定参数的key

 {path: "/news/info/:msg",name: "mewsinfo",component: () => import("../views/NewsInfoView.vue")}

2、在跳转中设置参数

		<li><router-link to="/news/info/百度新闻">百度新闻</router-link></li><li><router-link to="/news/info/网易新闻">网易新闻</router-link></li><li><router-link to="/news/info/头条新闻">头条新闻</router-link></li>

3、接收参数

<template><p>{{ $route.params.msg }}: 新闻详情</p>
</template>

在这里插入图片描述

五、嵌套路由

1、嵌套路由

// vue-router\src\router\index.js
import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'const routes = [{path: '/',name: 'home',component: HomeView},{path: '/about',name: 'about',// 异步加载,没有被点击不会加载component: () => import("../views/AboutView.vue")},{path: "/news",name: "mews",// 重镜像,默认选择baiduredirect: "/news/baidu",component: () => import("../views/NewsView.vue"),children: [{path: "baidu",component: () => import("../views/NewsBaiduView.vue")},{path: "wangyi",component: () => import("../views/NewsWangyiView.vue")}]}
]const router = createRouter({history: createWebHashHistory(),routes
})export default router

在这里插入图片描述

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

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

相关文章

STM32,我想看单片机上的外设时钟,我怎么看?

一&#xff1a;在工程中加入rcc文件 首先需要加载我们的时钟函数的文件 stm32f10x_rcc.h 和 stm32f10x_rcc.c 文件 二&#xff1a;查看文件 在h头文件 尾部&#xff0c;有我们这个总线的函数 在函数体内&#xff0c;有我们这个宏定义的 外设时钟&#xff0c;我们拿就行了 APB2_…

多版本并发控制MVCC

什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0c;…

观察者模式-对象间的联动

有个商城小程序&#xff0c;用户希望当有新品上市的时候能通知他们。这样用户就可以不要时刻盯着小程序了。在这个场景中&#xff0c;用户向小程序订阅了一个服务——发送新品短信。小程序在有新品上线时负责向订阅客户发出这个消息。 这就是发布-订阅模式&#xff0c;也称观察…

为什么不建议使用Python自带的logging?

B站|公众号&#xff1a;啥都会一点的研究生 包括我在内的大多数人&#xff0c;当编写小型脚本时&#xff0c;习惯使用print来debug&#xff0c;肥肠方便&#xff0c;这没问题&#xff0c;但随着代码不断完善&#xff0c;日志功能一定是不可或缺的&#xff0c;极大程度方便问题…

2023-10-17 LeetCode每日一题(倍数求和)

2023-10-17每日一题 一、题目编号 2652. 倍数求和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正整数 n &#xff0c;请你计算在 [1&#xff0c;n] 范围内能被 3、5、7 整除的所有整数之和。 返回一个整数&#xff0c;用于表示给定范围内所有满足约束条件的数…

10_集成学习方法:随机森林、Boosting

文章目录 1 集成学习&#xff08;Ensemble Learning)1.1 集成学习1.2 Why need Ensemble Learning?1.3 Bagging方法 2 随机森林(Random Forest)2.1 随机森林的优点2.2 随机森林算法案例2.3 随机森林的思考&#xff08;--->提升学习&#xff09; 3 随机森林&#xff08;RF&a…

经典链表问题:解析链表中的关键挑战

这里写目录标题 公共子节点采用集合或者哈希采用栈拼接两个字符串差和双指针 旋转链表 公共子节点 例如这样一道题&#xff1a;给定两个链表&#xff0c;找出它们的第一个公共节点。 具体的题目描述我们来看看牛客的一道题&#xff1a; 这里我们有四种解决办法&#xff1a; …

跟随光标圆形文本旋转

今天给大家带来的是光标变成圆形字符串环绕 不多说先上效果图 原理呢,也很简单 就是先把文本 <h2>大威天龙 - 世尊地藏 - 般若诸佛 - 般若巴嘛哄 -</h2>然后使用js将文本处理成每个字符一个span,并且让他们旋转 let text document.querySelector(h2)text.innerH…

第 368 场 LeetCode 周赛题解

A 元素和最小的山形三元组 I 前后缀操作&#xff1a;求出前后缀上的最小值数组&#xff0c;然后枚举 j j j class Solution { public:int minimumSum(vector<int> &nums) {int n nums.size();vector<int> l(n), r(n);//l[i]min{nums[0],...,nums[i]}, r[i]mi…

自然语言处理---Self Attention自注意力机制

Self-attention介绍 Self-attention是一种特殊的attention&#xff0c;是应用在transformer中最重要的结构之一。attention机制&#xff0c;它能够帮助找到子序列和全局的attention的关系&#xff0c;也就是找到权重值wi。Self-attention相对于attention的变化&#xff0c;其实…

数字孪生智慧建筑可视化系统,提高施工效率和建造质量

随着科技的不断进步和数字化的快速发展&#xff0c;数字孪生成为了建筑行业的一个重要的概念&#xff0c;被广泛应用于智能化建筑的开发与管理中。数字孪生是将现实世界的实体与数字世界的虚拟模型进行连接和同步&#xff0c;从而实现实时的数据交互和模拟仿真。数字孪生在建筑…

Python数字类型

目录 目标 版本 种类 官方文档 数据运算方法 常用函数 转整数 转浮点数 转绝对值 四舍五入 进制转换 math模块常用函数 目标 掌握Python两种数据类型的使用方法。 版本 Python 3.12.0 种类 数字类型有三种&#xff0c;分别是&#xff1a; 整数&#xff08;int&…