前端vue入门(纯代码)18

news2024/10/6 14:39:04

不管何时何地,永远保持热爱,永远积极向上!!!

20.尚硅谷GitHub搜索案例_vue-resource实现

1.vue-resource

  • vue-resource 是 vue 中一个用于发送请求的插件。
  • vue 发送请求推荐使用 axios ,vue-resource 的更新频率不高,且 vue 也推荐 axios。
1.1 安装插件vue-resource
npm i vue-resource

vue插件使用忘了的,点击此处。

1.2 在main.js中导入插件vue-resource
  • vue-resource 中使用的是默认导出,导入 vue-resource 使用变量vueResource 接收即可。
import vueResource from 'vue-resource'
1.3 在main.js中使用插件vue-resource
//使用插件
Vue.use(vueResource)
  • 没有使用 vue-resource插件,【 vue 实例对象和组件实例对象含有的部分属性如下】。

  • 使用 Vue 的 use() 方法使用插件,在所有的 vue 实例对象和组件实例对象中会多一个 $http 属性

在这里插入图片描述

  • 在所有的 vue 实例对象和组件实例对象中 $http 属性展开。

1.4 使用vue-resource发送请求
  • vue-resource 与 axios 一样都是 promise 风格的,vue-resource 发送请求的方法与形式和 axios 一样。

以发送 get 请求为例:

  • 用axios发送请求:
// 发起请求获取用户数据
axios.get(`请求地址`).then(
        //请求成功后,应该干什么?
        (response)=>{
          console.log(this);// this指vc
          console.log('请求成功');
          // 请求成功的处理代码写在这里,xxx
        },
        //请求失败后,应该干什么?
        (error)=>{
          console.log('请求失败', error.message)
          // 请求失败的处理 
        },
      );
  • 用vue-resource发送请求:
	  // 发起请求获取用户数据
      this.$http.get(`请求地址`).then(
        response => {
          console.log('请求成功')
          // 请求成功的处理
        },
        error => {
          console.log('请求失败', error)
          // 请求失败的处理          
        }
      )

2.基于插件vue-resource的GitHub搜索案例实现

  • 页面效果如下:

完整代码:

  • index.html
<!DOCTYPE html>
<html lang="zh-en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <!-- 引入第三方样式库 -->
    <link rel="stylesheet" href="<%= BASE_URL %>css/bootstrap.css">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>
  • main.js文件

    //引入Vue
    import Vue from 'vue'
    //引入App
    import App from './App.vue'
    //引入vue-resource插件
    import vueResource from 'vue-resource';
    //关闭Vue的生产提示
    Vue.config.productionTip = false
    //使用插件
    Vue.use(vueResource)
    
    //创建vm
    new Vue({
    	el:'#app',
    	render: h => h(App),
      // 生命周期钩子beforeCreate中模板未解析,且this是vm
      beforeCreate() {
        // this:指的是vm
    		Vue.prototype.$bus = this  //安装全局事件总线$bus
    	}
    })
    
  • App.vue文件

    <template>
    	<div class="container">
    		<Search/>
    		<List/>
    	</div>
    </template>
    
    <script>
    import List from './components/List';
    import Search from './components/Search';
    export default {
    	components: { List, Search},
    	name: 'App',
    };
    </script>
    
  • Search.vue文件

    <template>
    	<section class="jumbotron">
    		<h3 class="jumbotron-heading">Search Github Users</h3>
    		<div>
    			<input type="text" 
          placeholder="enter the name you search" 
          v-model="keyWord"
          />&nbsp;
    			<!-- 绑定一个点击事件 -->
    			<button @click="searchUsers">Search</button>
    		</div>
    	</section>
    </template>
    
    <script>
    export default {
    	name: 'Search',
      data() {
        return {
          keyWord:'',
        }
      },
    	methods: {
    		searchUsers() {
          console.log(this);
          //请求前更新List的数据【类似于初始化】
          this.$bus.$emit('updateListData',{isLoading:true,errorMsg:'',users:[],isFirst:false})
          // 获取该url:github搜索的数据
    			this.$http.get(`https://api.github.com/search/users?q=${this.keyWord}`).then(
            //请求成功后触发自定义事件,并传递数据
            (response)=>{
              console.log(this);// this指vc
              console.log(response.data);
              this.$bus.$emit('updateListData',{isLoading:false,errorMsg:'',users:response.data.items})
            },
            //请求失败后
            (error)=>{
              console.log('我请求数据失败后,传递失败的信息,并将users数据初始化');
              // 请求失败后 users必须制空,不然页面还是会显示上次成功请求的数据
              this.$bus.$emit('updateListData',{isLoading:false,errorMsg:error.message,users:[]})
            },
          );
    		},
    	},
    };
    </script>
    
  • List.vue文件

    <template>
    	<div class="row">
    		<!-- 展示用户列表 -->
    		<div
    			class="card"
    			v-show="info.users.length"
    			v-for="user in info.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>
    		<!-- 展示欢迎词 -->
    		<h2 v-show="info.isFirst">欢迎使用免费的GitHub接口!</h2>
    		<!-- 展示加载中 -->
    		<h2 v-show="info.isLoading">页面加载中....</h2>
        <!-- 展示错误信息 -->
    		<h2 v-show="info.errorMsg">{{ info.errorMsg }}</h2>
    	</div>
    </template>
    
    <script>
    export default {
    	name: 'List',
    	data() {
    		return {
    			info: {
    				isFirst: true,
    				isLoading: false,
    				errorMsg: '',
    				users: [],
    			},
    		};
    	},
    	// 全局数据总线:
    	// 接收数据的一方:在mounted钩子中定义自定义事件
    	mounted() {
    		// 绑定事件updateListData,并在回调函数中接收来自Search组件的数据【对象的形式:dataObj】
    		this.$bus.$on('updateListData', (dataObj) => {
          // 对象合并:相同的属性以后面的对象为主
    			this.info = {...this.info,...dataObj}
    		});
    	},
    };
    </script>
    
    <style scoped>
    h2 {
    	margin-left: 50px;
    }
    .album {
    	min-height: 50rem; /* Can be removed; just added for demo purposes */
    	padding-top: 3rem;
    	padding-bottom: 3rem;
    	background-color: #f7f7f7;
    }
    
    .card {
    	float: left;
    	width: 33.333%;
    	padding: 0.75rem;
    	margin-bottom: 2rem;
    	border: 1px solid #efefef;
    	text-align: center;
    }
    
    .card > img {
    	margin-bottom: 0.75rem;
    	border-radius: 100px;
    }
    
    .card-text {
    	font-size: 85%;
    }
    </style>
    

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

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

相关文章

2023上半年软考系统分析师科目一整理-23

2023上半年软考系统分析师科目一整理-23 对于如下所示的序列图所描述的场景&#xff0c;最适合于采用的设计模式是&#xff08;30&#xff09;&#xff1b;该模式适用的场合是&#xff08;31&#xff09;。 A&#xff0e;Visitor B&#xff0e;Strategy C&#xff0e;Observe…

TI AM64x工业核心板规格书(双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F,主频1GHz)

1 核心板简介 创龙科技SOM-TL64x是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 单/四核Cortex-R5F 单核Cortex-M4F设计的多核工业级核心板&#xff0c;通过工业级B2B连接器引出5x TSN Ethernet、9x UART、2x CAN-FD、GPMC、PCIe/USB 3.1等接口。核心板经过专业的PCB Layo…

【C++练习】string:字符串题型训练(5道编程题)

【C练习】string:字符串题型训练 Ⅰ.字符串中的第一个唯一字符Ⅱ.字符串最后一个单词的长度Ⅲ.把字符串转换成整数Ⅳ.字符串相加Ⅴ.反转字符串 Ⅰ.字符串中的第一个唯一字符 解题思路&#xff1a; 第一种方法&#xff1a; 两次遍历 1.第一次遍历&#xff0c;将每个字符出现的次…

【HTTP 协议2】如何构造 HTTP 请求

文章目录 前言一、地址栏输入二、HTML 特殊标签三、form 表单四、ajax总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结…

【Echarts】配置项归纳

【Echarts】配置项归纳 一、title二、legend三、grid四、xAxis/yAxis五、polar六、radiusAxis七、angleAxis八、radar九、dataZoom1. 内置型数据区域缩放组件2. 滑动条型数据区域缩放组件3. 框选型数据区域缩放组件 十、tooltip十一、axisPointer十二、toolbox十三、brush十四、…

不定长图文模型训练

文章目录 生成数据集模型选择计算均值和标准差训练代码测试集测试 生成数据集 import os import random from PIL import Image, ImageDraw, ImageFont, ImageFilter from io import BytesIO import timedef main():_first_num random.randint(1, 1000)_code_style [加, 减,…

【uniapp开发小程序】实现粘贴一段文字后,自动识别到姓名/手机号/收货地址

一、需求 在uni-app中开发小程序&#xff0c;实现粘贴一段文字后自动识别到手机号&#xff0c;并将手机号前面的内容作为姓名&#xff0c;手机号后面的内容作为收货地址&#xff0c;并去除其中的特殊字符和前缀标识。 实现效果&#xff1a; 二、实现方式&#xff1a; <…

【vue】vue.js中引入组件

目录 ⭐️一、点击按钮1弹出弹窗⭐️二、vue.js引入组件具体步骤1、创建自定义组件的文件夹&#xff08;以弹窗组件为例&#xff09;2、在index.vue中引入keyProductsTip.vue模块3、在index.vue中引入组件4、在index.vue中使用组件&#xff0c;点击按钮打开弹窗5、index.vue中的…

高级web前端开发工程师的主要职责模板(合集)

高级web前端开发工程师的主要职责模板1 职责&#xff1a; 1、web端页面的制作、开发和优化; 2、编写静态和动态页面和交互、特效等功能的脚本程序; 3、开发基于HTML5技术的可灵活定制、可扩展的前端UI组件; 4、优化前端架构&#xff0c;提高系统的灵活性和可扩展性; 5、开…

【AUTOSAR】BMS开发实际项目讲解(二十六)----电池管理系统低压上下电功能

低压上下电功能 关联的系统需求 Sys_Req_3101、Sys_Req_3102、Sys_Req_3103、Sys_Req_3104; 功能实现描述 低压上电管理 ID Description ASIL Ref. LVM-101 当系统检测到如下任一信号有效时&#xff1a; 整车CAN、ACC、IGN、CC、CP唤醒、一路预留硬线唤醒系统应…

Java安全——存取控制器

Java安全 存取控制器 Java安全中的存取控制器是一种技术&#xff0c;用于控制访问应用程序中的资源。它的基本思想是允许或拒绝特定用户对系统资源的访问。存取控制器包括四个关键部分: 主体(subject), 权限(permission), 对象(object)和存取控制策略(access control policy)。…

【vue3】学生管理案例

此案例可以分为4个部分&#xff1a; 渲染学生列表新增学生删除学生搜索学生 涉及的知识点主要为v-model双向绑定数据。 页面&#xff1a; <div id"main"><table><tr><td>学号</td><td>姓名</td><td>新增时间<…

121.【ElasticSearch伪京东搜索】

模仿京东搜索 (一)、搭建环境0.启动ElasticSearch和head和kblian(1).启动EslaticSearch (9200)(2).启动Es-head (9101)(3).启动 Kibana (5602) 1.项目依赖2.启动测试 (二)、爬虫1.数据从哪里获取2.导入爬虫的依赖3.编写爬虫工具类(1).实体类(2).工具类编写 4.导入配置类 (三)、…

Selenium系列(四) - 详细解读鼠标操作

引入HTML页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>测试笔记</title> </head> <body><a>用户名:</a> <input id"username" class"userna…

航空枢纽联通亚欧,开放合作互利共赢 —乌鲁木齐国际航空枢纽建设论坛将于7月6日召开

为创新开放型经济体制&#xff0c;加快建设对外开放大通道&#xff0c;更好利用国际国内两个市场、两种资源&#xff0c;积极服务和融入双循环新发展格局&#xff0c;促进经济高质量发展&#xff0c;2023年7月6日-7日&#xff0c;以“航空枢纽联通亚欧&#xff0c;开放合作互利…

基于matlab使用单眼摄像机图像数据构建室内环境地图并估计摄像机的轨迹(附源码)

一、前言 视觉同步定位和映射 &#xff08;vSLAM&#xff09; 是指计算摄像机相对于周围环境的位置和方向&#xff0c;同时映射环境的过程。该过程仅使用来自相机的视觉输入。vSLAM 的应用包括增强现实、机器人和自动驾驶。 此示例演示如何处理来自单眼摄像机的图像数据&…

从小白到大神之路之学习运维第50天---第三阶段----MMM高可用集群数据库的安装部署

第三阶段基础 时 间&#xff1a;2023年6月30日 参加人&#xff1a;全班人员 内 容&#xff1a; Mysql---MMM高可用集群架构 目录 一、MMM介绍 二、MMM工作原理 三、MMM安装部署 环境配置&#xff1a;&#xff08;所有主机配置&#xff09; 1、主机信息 ​编辑 2、…

探索无限可能的教育新领域,景联文教育GPT题库开启智慧教育新时代!

随着人工智能技术的快速发展&#xff0c;教育领域也将迎来一场革命性的变革。景联文科技是AI基础数据行业的头部企业&#xff0c;近期推出了一款高质量教育GPT题库。 景联文科技高质量教育GPT题库采用了先进的自然语言处理技术和深度学习算法&#xff0c;可以实现对各类题目的智…

一个输入网址就可显示网站安全性及网站主要内容的含GUI的Python小程序

文章目录 1.一些杂七杂八的引入2.实现2.1 显示网站安全性2.2 安装所需python包2.2.1 requests包2.2.1 beautifulsoup包 3.源码展示4.效果展示 1.一些杂七杂八的引入 上次发了一个类似爬虫&#xff0c;可以自动下载网页图片的python小程序&#xff08;详见一个自动下载网页图片…

【Web工具】3D 旋转中各数据格式之间的转换

1 Rotation Master — Link GitHub: Link 2 3D Rotation Converter — Link GitHub: Link 3 Quaternions — Link 4 Rotation Conversion Tool — Link 这是个人博客网站&#xff0c;其中可能有你需要的知识: Link