前端vue入门(纯代码)18

这篇具有很好参考价值的文章主要介绍了前端vue入门(纯代码)18。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

【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入门(纯代码)18

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

前端vue入门(纯代码)18

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

    前端vue入门(纯代码)18

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搜索案例实现

  • 页面效果如下:

前端vue入门(纯代码)18

完整代码:

  • 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文件文章来源地址https://www.toymoban.com/news/detail-513030.html

    <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>
    

到了这里,关于前端vue入门(纯代码)18的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端vue入门(纯代码)11

    【 11.全局事件总线(Global Event Bus) 】 全局事件总线:实现任意组件间通信 【原理图】 结合上图,假若C组件想要传递数据给A组件,那么,就通过全局事件总线在A组件中绑定 【$on】 一个自定义事件demo,并界定一个参数来接收传递的数据,同样在C组件中,就需要通过全局事件

    2024年02月10日
    浏览(50)
  • 前端vue入门(纯代码)21_vuex

    努力不一定成功,但是,不努力一定很轻松!!! 【 23.Vuex 】 [可以去官网看看Vuex3文档](Vuex 是什么? | Vuex (vuejs.org)) 问题1:Vuex是什么? 【官方理解1】:Vuex 是一个专为 Vue.js 应用程序开发的 状态【数据】管理模式 。它采用集中式存储管理应用的所有组件的状态,并以相应

    2024年02月13日
    浏览(53)
  • 前端vue入门(纯代码)24_Modules

    穷不怪父,苦不责妻,方为真男人! 【 23.Vuex中的模块化和命名空间 】 [可以去官网看看Vuex3文档](Module | Vuex (vuejs.org)) 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。 为了解决以上问题,Vuex 允许

    2024年02月13日
    浏览(52)
  • 前端vue入门(纯代码)35_导航守卫

    星光不问赶路人,时光不负有心人 【 33.Vue Router--导航守卫 】 导航守卫 正如其名, vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。 记住 参数或查询的改变并不会触发进入/离开的

    2024年02月16日
    浏览(41)
  • 前端vue入门(纯代码)22_四个map

    女为悦己者容,男为悦己者穷。!!! 【 23.Vuex中的四个map方法 】 [可以去官网看看Vuex3文档](Vuex 是什么? | Vuex (vuejs.org)) 1.vuex求和案例—getters版 getters概念:当state中的数据需要经过加工后再使用时,可以使用getters加工。【是 store 的计算属性】 【getters理解】:类似是Vue

    2024年02月12日
    浏览(33)
  • video-从入门到精通-不管任何项目奇葩需求,这一专栏就够了

    在日常我们的开发中,我们会遇到类似这样的功能,视频播放了这种情况,但是如果只是简单的实现的话, ui不满意,因为,别人有的,就是代表这是能实现的,你必须完成(苦der程序员) 为了解决这种苦恼,这篇专栏就够用了, 博主加急更新中!!!!!!! 大佬如有见解

    2024年02月11日
    浏览(47)
  • Vue前端使用I18实现中英文切换

    一、配置vue-i18 1. 进入src/locales/index.js 2. 查看 src/utils/tool.js文件 3. 查看 src/locales/lang/zh-cn.js、src/locales/lang/en.js 二、配置页面 进入需要有翻译功能的页面进行配置,如 login.vue 1. HTML内容 2. JS内容 三、主要步骤 方法一 ① 页面上添加小地球选择语言显示选项 ② 实现添加的小地

    2024年04月25日
    浏览(44)
  • 从零实现一套低代码(保姆级教程)【后端服务】 --- 【18】实现页面接口对应的前端

    在上一篇中,我们已经把和页面相关的接口完成的差不多了。从创建页面,更新页面等等: 有了接口之后,我们就可以构建前端页面了。那这部分前端内容我们应该写在哪里呢? 有两种方式: 直接写在我们的XinBuilder项目里面,然后通过前端路由拆分成两个路由 在创建一个

    2024年01月22日
    浏览(51)
  • Kafka 入门到起飞 - 什么是 HW 和 LEO?何时更新HW和LEO呢?

    上文我们已经学到, 一个Topic(主题)会有多个Partition(分区) 为了保证高可用,每个分区有多个Replication(副本) 副本分为Leader 和 Follower 两个角色,Leader副本对外提供读写服务,Follower 从Leader同步数据 当Leader副本挂掉,从ISR中选举一个Follower副本成为新的Leader对外继续提

    2024年02月10日
    浏览(41)
  • vue做一个一直自增加载且永远不会超过百分之九十九的数值 制造正在加载假象

    我们在src跟目录下创建一个utils目录下面创建一个continuousLoading.js 参考代码如下 这里这个描述甚至你也可以改成外面传进来的 我这里就直接设置 500 0.5秒执行一次了 然后每次进来判断 value 如果还小于99就继续 加一 然后回调一下传进来的函数 如果到99了 就直接clearInterval关掉

    2024年02月06日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包