这两天由于学习需要,需要用vue来调用api接口,但是以前没怎么接触过用vue来调用接口,不会没关系,发挥我们强大的学习能力,都不是事,学习了半天基本也就可以初级上手了,写篇随笔记录下来,方便以后回顾。当然童鞋们有更好的意见的请留言,一起学习进步。

  本次demo实现的是简单的百度搜索页面,用到了vue和百度接口,采用了单页实现,没有使用vue-cli。最初,要用vue实现接口功能我很懵,就去找资料查阅,网上的资料乱七八糟,bug满篇。最后自己借鉴“前人”的经验,在修改了所有bug,又完善了一些用户体验后,一个简单的百度搜索界面出来了。今天废话有点多。可能是开学一个月了有点烦躁。话不多说,开门见山!

  vue实例的建立挂载这里不多讲,可以去官网看文档。首先看<body>最终布局:下图

  

最外层的<div>作为根元素挂载vue实例,不能有兄弟标签。第二个<div>标签作为输入、点击的div,里面包含一个<input>、<button>.

input双向绑定了“t1”作为关键词输入,接着绑定了三个监听事件,get函数是获取接口以及返回数据、判断键盘事件的重要函数,keydown.down和up是解决我们输入关键词后得到了一连串的相关搜索数据显示在屏幕上的时候,需要用到上下键去选择我们需要的信息,并且带有简单的动画效果,即上下键选中哪个关键词,该词条就会显示为灰色以示提醒。button按钮添加了handleClick事件,虽然有点鸡肋(谁会去点击搜索呢,都是直接enter键),但button总不能啥都不干吧?输入关键词后,百度api为我们找的了一系列相近词条,得到这些词条,再把她们显示在搜框下部,这里用循环<li>来实现,并且动态绑定li的CSS样式。在给li添加了点击事件,用鼠标点击时,直接跳转百度该词条。接着上图:

  

  data里面提前配置了需要用到的数据,searchList保存api返回的相近词条、t1 为输入的关键词、now用作li的动态样式,确定哪一个词是当前选中的词条、index初始的Li索引值,用作鼠标点击下拉的某个词条时,可以明确得到该词条。继续上图:

  

重点是 $http.jsonp()方法,完美解决了跨域请求数据。不过本章篇幅有限,不多讲,可以自己看文档理解。触发get后,进行一个异步回调,回调的结果,若成功,请求来的数据赋给searchList数组保存,失败则报错。(res.body.s是数据接口中的一个数组)。再判断键盘事件,点击的是enter(键盘码13),打开百度窗口并带上关键词“t1”,若键盘事件是Backspace(键盘码8),直接将now赋值-1,这个我最后修改bug时添加的,因为当关键词不符合我们预期,用户进行回删时,下拉相近词条已经变化,但我们的灰色选中条却没变化,导致input输入框中的内容与灰色选中条内容不符,故回删时,重新初始now的值为-1,配合下图的 now++,当now+1变为0时,刚好对应searchList数组中的第一条数据。看图:

  

原理大同小异,上下键的选择就是控制了now的值,然后把seachList[now]的值在赋给关键词“t1”,达到选中框和input中的关键词一致的效果。searchLink函数从<li>那里带回来了当前li元素的index,利用index得到关键词,进行接口调用,(接口可以在百度->f12->network中找到),最后button事件,handleClick和input以及li没直接关联,所以也最简单,直接拿到“t1”就可以了。

 作者博客:https://home.cnblogs.com/u/fanghl/

 码字不易,相互理解,本着分享知识的乐趣,转载请注明出处!!

最后,上张图看下效果:

上下键(第二张图)的效果。欢迎留言共同谈论。夜深了,码字容易影响舍友睡觉,获取接口以及跨域请求($http.jsonp())改天在单独总结。

 作者博客:https://home.cnblogs.com/u/fanghl/

 码字不易,相互理解,本着分享知识的乐趣,转载请注明出处!!

  

Vue调用百度接口做百度搜索的更多相关文章

  1. python 调用百度接口 做人脸识别

    操作步骤差不多,记得要在百度AIPI中的控制台中创建对应的工单 创建工单成功后 会生成两个key  这个两个key是要生成tokn 用 这里大家可以用 def函数 将token返回 供下面的接口使用 ...

  2. 解决Vue调用springboot接口403跨域问题

    最近在做一个前后端分离的项目, 前端用的是Vue后端使用的是springboot, 在项目整合的时候发现前端调用后端接口报错403跨域请求问题 前端跨域请求已解决, 那么问题就出在后端了, 找了一些资 ...

  3. vue 调用第三方接口配置

    1.配置proxyTable 3.调用接口,将接口地址替换为配置的‘/api’

  4. vue调用支付接口

    html: <div class="paymentHtml" v-html="paymentHtml"></div> script: d ...

  5. Python调用百度接口(情感倾向分析)和讯飞接口(语音识别、关键词提取)处理音频文件

    本示例的过程是: 1. 音频转文本 2. 利用文本获取情感倾向分析结果 3. 利用文本获取关键词提取 首先是讯飞的语音识别模块.在这里可以找到非实时语音转写的相关文档以及 Python 示例.我略作了 ...

  6. Android学习笔记之使用百度地图实现Poi搜索

    PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...

  7. 百度和 Google 的搜索技术是一个量级吗?

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Kenny Chao 链接:http://www.zhihu.com/question/22447908/answer/2 ...

  8. php获取ios或android通过文件头(header)传过来的坐标,通过百度接口获取具体城市和地址,并存入到session中。

    首先,在function.php方法文件中封装一个获取header头文件的方法. if (!function_exists('getallheaders')) { function getallhea ...

  9. 百度地图API地点搜索-获取经纬度

    分享一下地图上的地点搜索和鼠标点击获取地点经纬度,这些都是地图比较基本和实用的代码,其中还包括了根据用户IP进行地图的显示.改变地图上的鼠标样式.启用滚轮缩放等,算是半入门吧,其他的一些可以自己参考百 ...

随机推荐

  1. 使用maven搭建springMVC开发环境

    1.引入框架所需的包,pom.xml文件中添加如下配置: <dependency> <groupId>org.springframework</groupId> & ...

  2. Python基础(二)自定义函数

    1.判断字符串,内容是否为数字 我们用python:xlrd读Excel内容时,本来只是输入的整数字,经常读出来的是float类型 我们需要自动转成整型,意思就是说,读出来的和我们输入的一样,但是,我 ...

  3. Python之包管理

    1.setup.py from distutils.core import setup setup(name='Distutils', version='1.0', description='Pyth ...

  4. RAMPS1.4 3d打印控制板接线与测试

    “工欲善其事,必先利其器”,在开始工作之前,你应该准备下面所说的工具(包括软件和硬件). 1.需要下载的软件 1.1 固件上传工具——Arduino IDE 这是上传固件的必备工具,有了这个软件让上传 ...

  5. Nginx技术研究系列4-Nginx监控-Nginx+Telegraf+Influxb+Grafana

    搭建了Nginx集群后,需要继续深入研究的就是日常Nginx监控. Nginx如何监控?相信百度就可以找到:nginx-status 通过Nginx-status,实时获取到Nginx监控数据后,如何 ...

  6. Beaglenone读取编码器数据

    一般情况下,beaglebone black默认启动两个cape: 1.BB-BONE-EMMC-2G 2.BB-BONELT-HDMI 我们可以通过编辑uEnv.txt的文件来决定是否启动HDMI, ...

  7. jQuery 查找元素2

    jQuery 查找元素2 :first <ul> <li>list item 1</li> <li>list item 2</li> < ...

  8. 使用js方法时,调用的方法名明明一致,但就是不管用,解决

    前提:代码全部写对 问题:调用的方法名明明一致,但就是不管用 举例:写了个function delete(){}方法, 点击调用delete方法,onclik="delete()" ...

  9. NPOI解决由于excel删除数据导致空行读取问题

    1.解决问题思路一:申明判断是否空行变量用于判断是否空行,声明变量数组用于临时非空行数据,最后存于datatable中. /// <summary>读取excel, /// 默认第一行为表 ...

  10. 剑指offer 05:用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题代码 import java.util.Stack; public class Solution{ ...