Vue的网络请求、插槽、Vuex

2023-12-19

axios

npm i axios

跨域问题,协议名+ip+端口号。

实际上,浏览器是收到数据的,但是没有交付给开发者。

解决跨域问题

创建代理服务器。代理服务器和前端端口是一样的,所以不存在跨域问题。代理服务器与后端服务器都是服务器,和浏览器没有关系,使用http协议传输数据,所以数据能正常交付给代理服务器。

1、如何创建代理服务器

nginx

2、借助vue-cli

配置参考 | Vue CLI


module.exports = {
  devServer: {
    proxy: 'http://localhost:4000'
  }
}  

public文件夹下边有的,都算是8080服务器有的。可以直接请求访问。如果public下边有,则不用访问后端服务器,可以直接去public下边有的。

3、配置多个代理服务器


module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: '<url>',
        ws: true,
        changeOrigin: true
      },
      '/foo': {
        target: '<other_url>'
      }
    }
  }
}  

兄弟组件间通信

main.js注册全局总线


beforeCreate(){
    Vue.prototype.$bus = this
}  

List.vue 【收数据】


mounted(){
    this.$bus.on('userList',(users)=>{
        console.log('我是List组件,收到了数据',users)
    })
}  

Search.vue 【传递数据】


this.$bus.$emit('userList',response.data.items)  

展示数据


<template>
    <!-- 展示用户列表 -->
    <div class="row" v-show="users.length">
        <div class="card" v-for="user in users" :key="user.login"> 
            <a :href="user.html_url" target="_blank">
                <img :src="user.avatar_url" style="width:100px" />
            </a>
            <p class="card-text">{{user.login}}</p>
        </div>
    </div>
</template>  

users的四种展示

1、默认欢迎页面

2、loading页面

3、成功返回页面

4、失败返回页面


data(){
    return{
        isFirst:true,//是否初次展示
        users:[],
        isLoading:false,//是否加载中
        errMsg:'',//错误信息
    }
}
<h1 v-show="isFirst">欢迎使用!</h1>
<h1 v-show="isLoading">加载中!</h1>
<h1 v-show="errMsg">{{errMsg}}</h1>  

Search.vue


searchUsers(){
	this.$bus.$emit('userList',{isFirst:false,isLoading:true,errMsg:'',users:[]});
	axios.get(`https://api.github.com/search/users?q=${this.keyWord}`).then(
		response=>{
			this.$bus.$emit('userList',{isLoading:false,errMsg:'',users:response.data.items})
		},
		error=>{
			this.$bus.$emit('userList',{isLoading:false,errMsg:error.message,users:[]})
		}
	)
}  

List.vue


mounted(){
	this.$bus.on('userList',(userObj)=>{
		console.log('我是List组件,收到了数据',userObj)
		this.info = {...this.info,...userObj}
	})
}  

插槽

默认插槽

插槽:就是告诉vue,在双闭合标签内部,要插入的内容的位置。

category.vue


<template>
	<div class="category">
		<h3>{{title}}</h3>
		<slot>我是一个默认值,当外围组件没有传递数据,我会出现</slot>
	</div>
</template>
<script>
	export default{
		name:"Categroy",
		props:['listData','title']
	}
</script>  

App.vue


<template>
	<div class="container">
		<Category title="美食" :listData="foods">
			<img src="xxxxxxxxx" alt=""/>
		</Category>
		<!-- <Category title="游戏" :listData="games"> -->
		<Category title="游戏">
			<ur>
				<li v-for="(g,index) in games" :key="index">{{g}}</li>
			</ul>
		</Category>
		
		<!--<Category title="电影" :listData="films"/>-->
		<Category title="电影">
			<video controls src="xxxxxxxxxxxxxx"></vedio>
		</Category>
	</div>
</template>  

具名插槽


存放位置:
<slot name="header">我是一个默认值,当外围组件没有传递数据,我会出现</slot>
外围:
<img slot="header" src="xxxxxxxxx" alt=""/>
外围:
<template v-slot:footer>
	<div class="xxx">
		xxxxxxxxxxx
	<div>
</template>  

作用域插槽

数据在插槽里边,外围想要使用


<slot :games="games">我是一个默认值,当外围组件没有传递数据,我会出现</slot>
外围:
<Category title="游戏">
	<template scope="getData"> <!-- template必须存在 -->
		<ul>
			<li v-for="(g,index) in getData.games" :key="index">{{g}}</li>
		</ur>
	</template>
</Category>  

Vuex

npm i vuex@3

Vue.use(Vuex)

store

vc要看到store

store/index.js


import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const actions = {}
const mutations = {}
const state = {
    sum:0
}

export default new Vuex.Store({
    actions,
    mutations,
    state
})  

main.js


import Vue from 'vue'
import App from './App.vue'
import store from './store/index'

Vue.config.productionTip = false


const vm = new Vue({
  render: h => h(App),
  store:store,
  beforeCreate(){
    Vue.prototype.$bus = this
  },
}).$mount('#app')
console.log('vm',vm);  

methods:{
	increment(){
		this.$store.dispatch('jia',this.n)
	}
}  

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const actions = {
    jia:function (context,value) {
        context.commit('JIA',value)
    }
}
const mutations = {
    JIA(state,value){
        state.sum += value
    }
}
const state = {
    sum:0
}

export default new Vuex.Store({
    actions,
    mutations,
    state
})  

action中的上下文中有什么

commit:流向Mutation

dispatch:继续再action里边处理事情 context.dispatch('demo1',value1) demo1方法处理完了之后,context.commit('xxx',value2);

getters

rootGetters

rootState

state:如果在上下文中直接修改state的值,那么vue-detTools就不能够捕获,vuex的数据流向了。

可以跳过dispatch


this.$store.commit('JIA',this.number)  

getters的作用

用于将state中的 数据进行加工,方便所有VC使用。computed仅仅在一个组件中使用


const getters = {
	bigSum(state){
		return state.sum * 10
	}
}
export {
	getters,
}
this.$store.getters.bigSum
  

vuex代码优化


this.$store.state.xxx很麻烦,可以借助计算属性
computed:{
	sum(){
		return this.xxxxxxxxxx
	}
}
这样写也很麻烦  

优化点,引入vuex


import {mapState} from 'vuex'
mounted(){
	const x = mapState({
		he:'sum',
		xuexiao:'school',
		xueke:'sunbject'
	});
	console.log(x)  可以看出x是一个对象,将其对象通过...加入到computed里边
}
computed:{
	...mapState({
		xxxxxxxxxxxxx
	})
	...mapGetters(['xxx','xxxxx'])
	...mapGetters("common", ["bbbbbbbbbb"]),
},
methods:{
	...mapActions("common",['xxxxxxxxxxxx]),
	...mapMutations("common",['aaaaaaaaaa']),
}  

Vuex模块化

store/index.js


const countOptions = {
	namespaced:true,
	actions:{
		
	}
}
const personOptions = {
	namespaced:true,
	actions:{
		
	}
}

export default new Vuex.Store({
    modules:{
    	countOptions,
    	personOptions,
    }
})
...mapState('countOptions',['xxx','xxxxxxx'])
//或者是
this.$store.commit('personOptions/ADD_PERSON',personObj);  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue的网络请求、插槽、Vuex 的相关文章

随机推荐

  • SH367309芯片

    博主 主要纪录自己常用的几种模式 以及自己觉得需要注意的点 具体的请看数据手册 且大部分都是从数据手册中截取 1 烧写模式 VPRO管脚外接EEPROM烧写电压V PRO 且延时10mS SH367309进入烧写模式 关闭充放电MOSFET
  • 网络安全学习路线,入门到入坟,史上最全网络安全学习路线整理

    很多小伙伴在网上搜索网络安全时 会出来网络安全工程师这样一个职位 它的范围很广 只要是与网络安全挂钩的技术人员都算网络安全工程师 一些小伙伴就有疑问了 网络安全现在真的很火吗 那么寒哥就带大家看看 这一行到底有没有传说中的那么火 首先带大家
  • 为什么我的对话框创建失败了?菜鸟错误1

    对话框中的资源要么被定义为一个整数 要么被定义为一个字符串 仅仅一个简单的错误将会将其中的一个类型错误的变成另一个类型 我们来看一个例子 gt gt 请移步至 www topomel com 以查看图片 lt lt 你是否能发现其中的两处
  • 基于微信小程序的洗衣店在线洗衣系统设计与实现

    博主介绍 全网粉丝10W CSDN全栈领域优质创作者 博客之星 掘金 华为云 阿里云等平台优质作者 精彩专栏 推荐订阅 计算机毕设精品项目案例 持续更新 文末获取源码 数据库 文档 感兴趣的可以先收藏起来 还有大家在毕设选题 项目以及论文编
  • 手机与这三物共处一室,风险重重,多数人竟仍蒙在鼓里

    随着智能手机的普及 人们的生活已经离不开手机了 手机不仅可以随时随地联系朋友 查找信息 购物支付 还可以拍照 录音 录像 满足我们的各种需求 然而 手机的使用也伴随着一些风险 特别是当我们不注意手机的使用和存放时 可能会造成意想不到的损失
  • MySQL查询语句基础解析

    一般查询 直接查询 语法 select 字段 from 表名 举例 select name age from student 解析 从 student 表中查询 name 与 age 条件查询 语法 select 字段 from 表名 wh
  • JavaOOP篇----第四篇

    系列文章目录 文章目录 系列文章目录 前言 一 Char类型能不能转成int类型 能不能转化成string类型 能不能转成double类型 二 什么是拆装箱 三 Java中的包装类都是那些 前言 前些天发现了一个巨牛的人工智能学习网站 通俗
  • 网络安全面试题

    在当今社会网络安全行业越来越发达 也有越来越多的人去学习 为了更好地进行工作 除了学好知识外还要应对企业的面试 所以在这里我归总了一些网络安全方面的常见面试题 希望对大家有所帮助 windows常见 1 描述tcp udp的区别及优劣 及其
  • 100套风景+人物动物AI绘画关键词

    1 10美元计划 Midjourney的10美元计划是最基础的计划 每月可以生成200张图 然而没有fast模式 也无法免排队生成图 相对于30美元和60美元计划 这个计划更适合个人用户或小型团队使用 仅用于少量图像的生成 如果你只是偶尔需
  • 中国1KM分辨率年均降水量数据集(1901-2022)

    数据名称 中国1KM分辨率年均降水量数据集 1901 2022 数据时间 1901年至今 数据空间位置 全国 数据格式 tiff 数据空间分辨率 1kM 数据坐标系 WGS1984 数据简介 该数据集为全国逐年平均降水量数据 空间分辨率为0
  • 如何实现MQTT网关连接各类工业物联设备,实现数据传输与控制

    MQTT是一种轻量级的发布 订阅消息传输协议 专门为低带宽 高延迟或不稳定的网络环境设计 它支持离线消息存储 使客户端在未连接到服务器时也能接收到消息 MQTT网关是一种采用MQTT协议的网关设备 可以连接不同类型的工业物联设备 实现设备之
  • 基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程

    招投标管理系统是一款适用于招标代理 政府采购 企业采购和工程交易等领域的企业级应用平台 该平台以项目为主线 从项目立项到项目归档 实现了全流程的高效沟通和协作 通过该平台 用户可以实时共享项目数据信息 实现规范化管理和有效监控 协同工作网络
  • 使用AI大模型生成动漫人像

    在线体验 点击 图像处理 即可使用 public static final String SELFIE ANIME https aip baidubce com rest 2 0 image process v1 selfie anime
  • 高薪程序员也躲不过35岁这一关..当能力与年龄脱节,我们该如何自救

    在测试行业 甚至是整个互联网行业 存在这样一个神奇又隐秘的传说 过了 35 岁 你就找不到好工作了 没有哪一个企业出来声明 没有企业敢 也没有哪个超过 35 岁的员工出来反驳 似乎这已经是这个行业的通识 35岁已经成为一条冷酷的分界线 也是
  • Kubernetes 简介

    1 Kubernetes简介 一个容器管理应用 提高容器化服务的部署和管理效率 2 容器部署 2 1 传统部署形式 应用共用服务器环境 对于底层资源 文件目录 JDK 网络带宽等 存在弹性争夺 冲突等问题 容易导致应用性能不稳定 服务器环境
  • 中国90米分辨率可蚀性因子K数据

    数据时间 2023年 数据空间位置 全国 数据空间分辨率 90m 数据坐标系 WGS1984 数据格式 tiff 数据来源 地球资源数据云平台 www gis5g com 如需要请自行联系 数据简介 土壤可蚀性因子 K 数据 基于多种土壤属
  • 【网络安全】-Linux操作系统—CentOS安装、配置

    CentOS是一个基于Red Hat Enterprise Linux构建的免费操作系统 它提供了企业级的稳定性和安全性 非常适合用于服务器环境 以下是CentOS安装和基本配置的详细指南 准备工作 在安装CentOS之前 需要准备安装介质
  • 二蛋赠书十二期:《一本书讲透Java线程:原理与实践》

    摘要 互联网的每一个角落 无论是大型电商平台的秒杀活动 社交平台的实时消息推送 还是在线视频平台的流量洪峰 背后都离不开多线程技术的支持 在数字化转型的过程中 高并发 高性能是衡量系统性能的核心指标 越来越多的公司对从业人员的多线程编程能力
  • PHP中1688平台商品详情数据API接口采集到数据后如何处理

    PHP的定义和特点 PHP Hypertext Preprocessor 是一种开源的服务器端脚本语言 用于快速构建动态网页和Web应用程序 PHP采用嵌入HTML的方式 可以直接嵌入到HTML代码中 与数据库连接 数据处理 文件上传等操作
  • Vue的网络请求、插槽、Vuex

    axios npm i axios 跨域问题 协议名 ip 端口号 实际上 浏览器是收到数据的 但是没有交付给开发者 解决跨域问题 创建代理服务器 代理服务器和前端端口是一样的 所以不存在跨域问题 代理服务器与后端服务器都是服务器 和浏览器