Vue(ajax、插槽)

news2024/9/20 15:54:30

一、ajax请求

1. 实现ajax请求方式:

  • xhr:原生

  • jquery封装xhr

  • axios:属于promise

  • fetch

2. axios实现步骤:

1.首先安装axios

//安装
npm i axios

 2. 在本地准备两个服务端

//student
const express = require('express')
const app = express()

app.use((request,response,next)=>{
	console.log('有人请求服务器1了');
	console.log('请求来自于',request.get('Host'));
	 console.log('请求的地址',request.url);
	next()
})

app.get('/students',(request,response)=>{
	const students = [
		{id:'001',name:'tom',age:18},
		{id:'002',name:'jerry',age:19},
		{id:'003',name:'tony',age:120},
	]
	response.send(students)
})

app.listen(5000,(err)=>{
	if(!err) console.log('服务器1启动成功了,请求学生信息地址为:http://localhost:5000/students');
})
//cars
const express = require('express')
const app = express()

app.use((request,response,next)=>{
	console.log('有人请求服务器2了');
	next()
})

app.get('/cars',(request,response)=>{
	const cars = [
		{id:'001',name:'奔驰',price:199},
		{id:'002',name:'马自达',price:109},
		{id:'003',name:'捷达',price:120},
	]
	response.send(cars)
})

app.listen(5001,(err)=>{
	if(!err) console.log('服务器2启动成功了,请求汽车信息地址为:http://localhost:5001/cars');
})

3. 在组件中引入并使用axios发送ajax-get请求

import axios from "axios"
//模板按钮 
<button @click="getStudent">获取学生信息</button>

//vue中设置请求方法
    methods: {
    getStudent(){
      axios.get('http://localhost:5000/students').then(
        // 成功形参
        response => {
          console.log('请求成功的',response.data);
        },
        // 失败形参
        error=>{
          console.log('请求失败',err.message);
        }
      )
    }

4. 解释跨域

以上ajax请跨域,因为本地的端口号是8080

请求过程中:两个计算机的协议类型、主机、端口号三个都必须一致,任一不同都会导致跨域请求

5. 解决跨域

  • cors:解决跨域,在写服务器的时候添加特殊响应头(不可以随便设置,否则都可以获取到数据)

    // 自定义响应头
  response.setHeader("Access-Control-Allow-Headers", "*");
  • JSONP:借助script标签src属性引入外部资源不受同源策略(只有get请求可以用)

jsonp原理详解——终于搞清楚jsonp是啥了_哪 吒的博客-CSDN博客一、JSONP的由来1、Ajax直接请求普通文件存在跨域无权限访问的问题,不管是静态页面、动态页面、web服务,只要是跨域请求,一律不准。2、不过我们发现,web页面调用js文件则不受跨域的影响(不仅如此,我们还发现凡是拥有“src”这个属性的标签都拥有跨域的能力,比如<\script>、<\img>、<\iframe>)。3、于是可以判断,当前阶段如果想通过纯web端跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用https://blog.csdn.net/guorui_java/article/details/107345499?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168429206416782427418587%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168429206416782427418587&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-107345499-null-null.142%5Ev87%5Ekoosearch_v1,239%5Ev2%5Einsert_chatgpt&utm_term=jsonp&spm=1018.2226.3001.4187

  • 代理服务器:客户端向代理服务器发送请求,代理服务器向指定跨域服务器发送请求

6. 代理服务器使用

此处了解脚手架中的开启代理服务器

  • 在脚手架的config文件中进行配置开启解决跨域代理服务器
  • 配置前端获取端口(改为代理服务器)
  • 开启server1服务器
  • 然后进行访问

配置参考 | Vue CLI🛠️ Vue.js 开发的标准工具https://cli.vuejs.org/zh/config/#devserver-proxy

开启代理服务器1:在vue.config.js文件中进行配置(查看上方链接文档)

目标地址指向访问的服务器

devServer: {
    proxy: 'http://localhost:5000'
  }

然后组件中直接定义方法:使用axios进行获取数据(注意要引入,端口变成8080)

 getStudents(){
      axios.get('http://localhost:8080/xlf/students').then(
        // 成功形参
        response => {
          console.log('请求成功的',response.data);
        },
        // 失败形参
        error=>{
          console.log('请求失败',error.message);
        }
      )
    },

代理服务器问题:

  • 不能配置多个代理

  • 不是将所有请求转发给传送数据服务器(当自身服务器存在就直接获自身服务器上的数据而不获取代理服务器)

  • public文件就是8080服务器根目录

  • 例如直接在根目录创建一个txt文件,里面添加数据,文件命名为students

 

开启代理服务器1:在vue.config.js文件中进行配置(查看上方链接文档)

  • 此处注意文档中不存在的配置:pathRewrite(代理服务器前缀修改)

  • 直接本地进行ajax请求代理服务器会存在报错,因为代理服务器访问服务器会存在前缀

 

 // 配置代理方式2:指定多个代理
  devServer: {
    proxy: {
      // 请求前缀:当本地8080给代理发送请求,如果请求前缀符合指定代理
      '/xlf': {
        // 代理目标地址
        target: 'http://localhost:5000',
        //配置将代理服务器前缀转为空
        pathRewrite: {'^/xlf': ''},
        ws: true,
        //false:就是获取端口
        // true:就是被请求的端口
        // changeOrigin: true//控制请求头中的host值,默认为真
      },
      '/demo': {
        // 代理目标地址
        target: 'http://localhost:5001',
        //配置将代理服务器前缀转为空
        pathRewrite: {'^/demo': ''},
        ws: true,
        //false:就是获取端口
        // true:就是被请求的端口
        // changeOrigin: true//控制请求头中的host值
      },
    }
  }
getStudents(){
      axios.get('http://localhost:8080/xlf/students').then(
        // 成功形参
        response => {
          console.log('请求成功的',response.data);
        },
        // 失败形参
        error=>{
          console.log('请求失败',error.message);
        }
      )
    }
  • changeOrigin的作用:控制请求头中的host值

    • 如果设置为false:直接表示来自于8080端口
    • 如果设置为true:给服务器撒谎来自于相同服务器

 

  •  弥补了代理服务器1=>可以给多个服务器进行代理(使用时候注意前缀)

 '/demo': {
        // 代理目标地址
        target: 'http://localhost:5001',
        //配置将代理服务器前缀转为空
        pathRewrite: {'^/demo': ''},
        ws: true,
        //false:就是获取端口
        // true:就是被请求的端口
        // changeOrigin: true//控制请求头中的host值
      },
 getCars(){
      axios.get('http://localhost:8080/demo/cars').then(
        // 成功形参
        response => {
          console.log('请求成功的',response.data);
        },
        // 失败形参
        error=>{
          console.log('请求失败',error.message);
        }
      )
    }

二、插槽

目的:让父组件可以向子组件指定位置插入HTML结构,是一种组件间通信方式

适用于:父组件  ===>  子组件

常用父给子传递数据:

  • 父组件中实例化子组件时候传递数据
  • 子组件props进行接收
  • 然后进行使用 

如果需要显示不同内容就需要在子组件添加显示判断指令(结构较麻烦)

1. 默认插槽

  • 子组件获取结构处(挖坑)定义标签slot

  • 父组件中实例化时候使用双标签,在其中布置html结构,也可以直接遍历其中数据等操作

 
<!--子组件:定义一个插槽(等着组件的使用者进行填充) -->
 <slot>我是一些默认值,当使用者没有传递据结构,会出现</slot>
//父组件 可以传递数据也可以直接布置结构
<Category title='游戏'>
      <ul>
        <li v-for="(g,index) in games" :key='index'>{{g}}</li>
      </ul>
   </Category>

2. 具名插槽

  • 直接给子组件(挖坑)定义标签slot时候添加标签属性name命名

     

  • 父组件中实例化时候使用双标签,在其中布置html结构,标签中使用标签属性定义插槽位置

    • slot=坑名:可以直接使用

    • v-slot=坑名:需要template标签包裹结构

<slot name="center">我是一些默认值,当使用者没有传递据结构,会出现1</slot>
<slot name="footer">我是一些默认值,当使用者没有传递据结构,会出现2</slot>
<Category title='电影' >
    <video slot="center" controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video>
    <template v-slot:footer>
       <div class="foot">
          <a href="">经典</a>
          <a href="">热门</a>
          <a href="">推荐</a>
      </div>
      <h4>欢迎前来观影</h4>
    </template>
   </Category>

3. 作用域插槽

当前数据存放在子组件中

  • 首先子组件(挖坑)slot:利用数据绑定将当前组件中的数据进行绑定

  • 然后父组件中使用template包裹结构:使用标签属性scope获取传入数据名字

  • 麻烦:遍历scope命名数据时候需要逐层获取到传递的数据

<slot :games='games'></slot>
<!-- 注意此时的 数据在当前子组件 -->
<Category title='游戏'>
      <template scope="games">
        <ul>
          <li v-for="(g,index) in games.games" :key='index'>{{g}}</li>
        </ul> 
      </template>
    </Category>

解决以上麻烦:

直接使用scope进行优化替换标签属性值:scope-> slot-scope

<Category title='游戏'>
      <template slot-scope={games}>       
        <h4 style="color:red" v-for="(g,index) in games" :key='index'>{{g}}</h4>
      </template>
    </Category>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一级缓存和二级缓存问题

介绍 MyBatis 中的缓存&#xff0c;主要分为一级缓存和二级缓存。 一级缓存是 SqlSession 级别的缓存&#xff0c;也叫本地缓存。当执行一个 SqlSession 的查询时&#xff0c;查询到的结果会被保存在 SqlSession 的缓存中。同一个 SqlSession 内执行相同的 SQL 语句&#xff…

C语言CRC-16 CCITT-FALSE格式校验函数

C语言CRC-16 CCITT-FALSE格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同应用规范…

【MySQL】浅谈事务

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a;保护小周ღ 谈起 “事务”&#xff0c;可能大家都会在心中出现一个大大的 &#xff1f;&#xff0c;博主的理解——事务就是解决 MySql数据库在应对多线程环境下针对同一存储空间的数据修改引起的数据安全问题的一种机制…

JMeter入门配置

目录 场景&#xff1a; 环境及工具 &#xff1a; JMeter中文配置&#xff1a; 配置登录接口&#xff1a; 配置响应结果&#xff1a; 配置json提取器 测试json提取器 配置Beanshell后置处理器&#xff1a; http请求右键-->添加---->后置处理器--->Beanshell后置处理…

pta(浙大第四版)五道经典练习题②

目录 ①、递归正序输出整数 ②、递归逆序整数并返回 ③、递归实现十进制转二进制 ④、英语单词排序&#xff08;​编辑&#xff09; ⑤、输出月份英文名 ①、递归正序输出整数 题述&#xff1a;给一个正整数n&#xff0c;请利用递归按顺序输出它的每位数&#xff0c;输出一…

【NovelAI 小说SD批量生成 文生图/视频克隆】环境配置和使用方法

【样品】《谜影之夜》文生图全自动版SD一键成片 操作步骤&环境配置地址&#xff1a; 【NovelAI】月产10000全自动批量原创小说短视频支持文生图和视频克隆 该文章面向购买脚本的付费用户&#xff0c;提供所有问题以及解决办法。使用 notepad 打开对应的文件即可&#xff0c…

深度学习部署(Pytorch+windows)

目录 NVIDA GPU驱动 NVIDA GPU驱动 查看电脑显卡类型&#xff08;电脑——属性——设备管理器——显示适配器&#xff09; 进入NVIDA官方网站&#xff08;官方驱动 | NVIDIA&#xff09;下载对应驱动&#xff0c; 接下来默认安装即可。 安装完成之后&#xff0c;查看自己的…

GitHub项目免费教你提示工程,全中文教学,小白也能懂

转载自 | 量子位 量子位 | 公众号 QbitAI 这个GitHub开源项目&#xff0c;打算手把手教你成为一名提示工程师。 理论与实例结合&#xff0c;浅显易懂&#xff0c;可以免费学习&#xff0c;关键还是中文&#xff01; 如果觉得GitHub界面看起来不方便&#xff0c;还可以到搭建…

文心领航走进大模型时代,从Q1财报看百度价值重估机遇

大模型风头不减&#xff0c;真正的“灵魂选手”在此刻交出了一季度成绩单&#xff0c;让市场看到了“AI巨头”的本色。 北京时间5月16日美股盘前&#xff0c;百度发布了2023Q1财报。财报显示&#xff0c;其营收和利润双双超市场预期&#xff0c;整体经营质量大幅度提高。在经济…

基于卷积的图像分类识别(四):GoogLeNet (V1~V4 Xception)

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

JavaWeb学习-MyBatis-入门

JavaWeb学习-MyBatis-入门 快速入门准备工作配置Mybatis(数据库连接)编写程序mappertest 配置SQL提示JDBC介绍概述案例 数据库连接池概述连接池切换Druid连接池 lombok工具介绍maven坐标案例 来源 快速入门 准备工作 创建SpringBoot工程 数据库表usercreate table user (id …

flume 进阶 自定义source(十)

需求 每隔五秒输出5次数据 pom文件 <dependencies><dependency><groupId>org.apache.flume</groupId><artifactId>flume-ng-core</artifactId><version>1.9.0</version></dependency></dependencies>代码 pac…

NETALAND惊艳上线,平行云助力元宇宙大玩家网易闪亮登场

近日&#xff0c;网易传媒旗下全新的泛娱乐体验空间NETALAND惊艳上线。NETALAND以其近乎于电影质感的场景&#xff0c;趣味的互动模式&#xff0c;流畅、沉浸的交互体验&#xff0c;给营销行业带来了一份新答卷。 NETALAND整合了网易传媒强大的元宇宙技术和丰富的内容生态&…

【Jenkins】新手安装、运行Jenkins(详细教学)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、…

【c语言】Union共用体

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

如何将 O2OA 集成到企业微信实现微信办公

O2OA 平台拥有配套的原生开发的安卓和 IOS 移动 APP&#xff0c;可以以自建应用的方式集成到企业微信&#xff0c;同步企业微信的企业通讯录作为本地组织人员架构&#xff0c;并且可以将待办等通知直接推送到企业微信进行消息提醒。本篇主要介绍如何将 O2OA 集成到企业微信实现…

4年外包出来人废了,5次面试全挂....

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;毕业于普通二本院校非计算机专业&#xff0c;18年跨专业入行测试&#xff0c;第一份工作在湖南某软件公司&#xff0c;做了接近4年的外包测试工程师&#xff0c;今年年初&#xff0c;感觉自己不能够再这样下去了&…

开心档之Java 抽象类

Java 抽象类 目录 Java 抽象类 抽象类 Employee.java 文件代码&#xff1a; AbstractDemo.java 文件代码&#xff1a; 继承抽象类 Salary.java 文件代码&#xff1a; AbstractDemo.java 文件代码&#xff1a; 抽象方法 Salary.java 文件代码&#xff1a; 抽象类总结…

2023海外网红营销策略揭秘:打造品牌曝光的7大技巧

随着全球互联网的普及&#xff0c;海外网红营销成为越来越多出海品牌的首选策略之一。然而&#xff0c;要在海外市场成功打造品牌形象并吸引目标受众并不容易。本文Nox聚星将详细介绍几项关键技巧&#xff0c;帮助您在海外市场中成功实施网红营销。 一、深入了解目标市场 在海…

如何避免软件bug?优化你的测试流程和设计用例方法就对啦!

目录 引言 一、测试流程 二、测试用例设计方法 等价类 边界值 场景设计法 判定表 错误推测法 结语 引言 对于大多数软件开发者和测试人员而言&#xff0c;避免出现bug是一项非常重要的任务。但是&#xff0c;在实际的开发过程中&#xff0c;我们经常容易忽略一些细节…