Vue 学习笔记08:Vue中的Ajax

Vue中的Ajax

  • 一、配置代理(解决跨域)
    • 1. 方法一
    • 2. 方法二
  • 二、Vue 中的 Ajax 库
    • 1. axios
    • 2. vue-resource
  • 三、slot 插槽

一、配置代理(解决跨域)

1. 方法一

在 vue.config.js 中添加如下配置:

devServer: {
     proxy: 'http://localhost:5000/'
}
  • 有点配置简单,请求资源时直接发给前端(8080)即可。
  • 缺点:不能配置多个代理,不能灵活的控制请求是否走代理。
  • 工作方式:若按照上述配置代理,当请求了前端不存在的资源时,那么该请求会转发给服务器(优先匹配前段资源)

2. 方法二

在 vue.config.js 中添加具体代理规则:

devServer: {
    proxy: { 
        '/xx': {  // 匹配所有以'/x'开头的请求路径
            target: "http://localhost:5000/",  // 代理目标的基础路径
            pathRewrite: { '^/xx': "" },
            ws: true,
            changeOrigin: true
        },
        '/x': {
            target: "http://localhost:5001/",
            pathRewrite: { '^/x': "" },
            ws: true,
            changeOrigin: true
        }
    }
}
  • changeOrigin 为 true 时,服务器收到的请求头中的 host 是代理目标路径;为 false 时,服务器收到的请求头中的 host 是前端(8080)路径
  • 优点:可以配置多个代理,且可以灵活的控制请求是否走代理。
  • 缺点:配置略微繁琐,请求资源时必须加前缀。
// 请求数据
methods: {
    getStudents() {
      axois.get("http://localhost:8080/xx/students").then(
        response =>{
          console.log(response);
        },
        error =>{
          console.log(error.message);
        }        
      )
    },
  },

二、Vue 中的 Ajax 库

1. axios

  • 安装
npm i axios
  • 使用
    Vue 学习笔记08:Vue中的Ajax_第1张图片

2. vue-resource

vue-resource 是一个 Vue 插件,但是还是推荐用 axios。

  • 安装
npm i vue-resource
  • 使用,在入口文件中引用
    Vue 学习笔记08:Vue中的Ajax_第2张图片
    调用 $http 方法
    Vue 学习笔记08:Vue中的Ajax_第3张图片

三、slot 插槽

  • 作用:让父组件可以向子组件指定位置插入html 结构,也是一种组件间通信的方式,适用于 【父组件 ===> 子组件】
  • 分类:默认插槽、具名插槽、作用域插槽
  1. 默认插槽

<Category>
	<div>结构div>
Category>


<template>
	<div>
	    
	    <slot>插槽默认内容...slot>
	div>
template>
  1. 具名插槽

<Category>
	<template v-slot:center>
    	<div>html结构div>
  	template>
  
  	<template slot="footer">
   	 	<div>html结构div>
 	template>
Category>


<template>
  	<div>
		
		<slot name="center">插槽默认内容...slot>
		<slot name="footer">插槽默认内容...slot>
  	div>
template>
  1. 作用域插槽:
    数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定。(games 数据在 Category 组件中,但使用数据所遍历出来的结构由 App 组件决定)

<Category>
  	<template scope="scopeData">
  		
    	<ul>
      		<li v-for="game in scopeData.games" :key="game">{{ game }}li>
    	ul>
  	template>
Category>

<Category title="游戏">
  	<template slot-scope="{ scopeData }">
      	<h4 v-for="game in scopeData" :key="game">{{ game }}h4>
  	template>
Category>


<template>
	<div>
		 <slot :games="games">插槽默认内容...slot>
	div>
template>

<script>
	export default {
		name:"Category ",
		props: ["title"],
		// 数据在子组件自身
		data() {
			return {
				games: ["红色警戒", "穿越火线", "劲舞团", "超级玛丽"],
			};
		},
	};
script>

你可能感兴趣的:(前端,javascript,前端,js,vue.js,vue)