vue实现搜索框搜索新增_基于Vue.js实现简单搜索框
主要用到的知识很简单,简单的vuejs2.0的知识就够了。源码用了.vue构建和ES6,用了webpack打包等等。我资历还浅,先用一个简单的.js的写。
先看效果
这里有两个组件,一个组件是logo部分的,一个是搜索框部分的。
html
html很简单,就是引用两个组件。
//js还要实例#app
var app = new Vue({
el: "#app"
})
logo
先来分析,首先一个显示搜索引擎的图片,这里要响应式的,下面选择了不同的搜索引擎图标就要跟着换。所以。后面的倒三角点击时显示下拉列表 。
然后是下拉框。如果想要有过渡效果,那个就要包裹在
想要有hover效果的话,用数据驱动的思维,就是比较index 与hoverindex是否相等,如果相等就加class。
Vue.component('logo-picture',{
template :' \
\
\
\
\
\
\
\
',
data: function() {
return {
items: [{src:'../src/assets/360_logo.png'},{src:'../src/assets/baidu_logo.png'},{src:'../src/assets/sougou_logo.png'}],
now: 0,
flagShow: false,
hoverindex: -1
}
},
methods: {
//显示隐藏图片列表
toggleFlag: function() {
this.flagShow = !this.flagShow;
},
//改变搜索引擎
changeFlag: function(index) {
this.now = index;
this.flagShow = false;
bus.$emit("change",index);
},
//li hover
flagHover: function(index) {
this.hoverindex = index;
}
}
});
下拉框
input因为要双向绑定,所以要v-model="keyword",还要绑定键盘事件@keyup,如果按enter就搜索,向下向上就选中给定的返回信息列表。
下面的详情框与下拉列表差不多。
搜索的话主要是运用$http.jsonp,还有ES6的语法?回掉好像是Promise的.then()。
Vue.component('search-panel',{
template:'\
\
×\
搜一下\
\
\
{{value}}\
\
\
\
',
data: function() {
return {
search: '',
myData: [],
flag: 0,
now: -1,
logoData: [
{
'name': "360搜索",
searchSrc: "https://www.so.com/s?ie=utf-8&shb=1&src=360sou_newhome&q="
},
{
'name': "百度搜索",
searchSrc: "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd="
},
{
'name': "搜狗搜索",
searchSrc: "https://www.sogou.com/web?query="
}
]
}
},
methods: {
get: function(event) {
if(event.keyCode == 38 || event.keyCode == 40){ //向上向下
return ;
}
this.$http.jsonp('https://sug.so.360.cn/suggest?word=' + this.search + '&encodein=utf-8&encodeout=utf-8').then(function(res) {
this.myData = res.data.s;
}, function() {
});
},
//清除内容
clearInput: function() {
this.search = '';
this.get();
},
//搜索
searchInput: function() {
alert(this.flag)
window.open(this.logoData[this.flag].searchSrc+this.search);
},
//搜索的内容
searchThis: function(index) {
this.search = this.myData[index];
this.searchInput();
},
//li hover
selectHover: function(index) {
this.search = this.myData[index];
this.now = index;
},
//向下
selectDown: function() {
this.now++;
if(this.now == this.myData.length) {
this.now = 0;
}
this.search = this.myData[this.now];
},
//向上
selectUp: function() {
this.now--;
if(this.now == -1) {
this.now = this.myData.length - 1;
}
this.search = this.myData[this.now];
}
},
created: function() { //通信
var self = this;
bus.$on('change',function(index) {
self.flag = index;
})
}
})
两个兄弟组件通信的问题
换了搜索引擎的话,要换成相应的搜索引擎。这里要新建一个空的Vue对象做中间,因为两个组件不是父子关系。
var bus = new Vue();
//logo-picture里触发事件,并传递参数
bus.$emit("change",index);
//search-panel里监听事件是否发生
var self = this;
bus.$on('change',function(index) {
self.flag = index;
})
这里要注意this问题,$on里this指向bus,所以要保存this才能引用search-panel.
本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。
关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。
更多搜索功能实现的精彩文章,请点击专题:javascript搜索功能汇总 进行学习
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
vue实现搜索框搜索新增_基于Vue.js实现简单搜索框相关推荐
- vue里面怎么删除部分页面_基于VUE选择上传图片并页面显示(图片可删除)
基于VUE选择上传图片并在页面显示,图片可删除,具体内容如下 demo例子: 依赖文件: HTML文本内容: 相关照片 JS文本内容: /** * 从 file 域获取 本地图片 url */ fun ...
- vue实现卡片式上下滑动_基于Vue.js仿制探探卡片左右滑动特效
说明 > 最近一直在捣鼓Nuxt.js项目,项目中有个需求是实现类似探探左右滑动切换功能.要求能实现手指拖拽切换.点击按钮进行切换.拖拽回弹等功能. 如上图:最终展示效果 emmm~~ 是不是感 ...
- vue实现上下滑动翻页_基于vue实现上下滑动翻页效果
18年年底的时候,一直在做年度报告的H5页面,因为项目需要,需要实现上下滑动翻页,并且上滑的页面比正常页面的比例要缩小一定比例. 效果类似于http://www.17sucai.com/pins/de ...
- vue 微信公众号支付接口_基于vue的h5项目之支付宝支付与微信支付
本文仅记录基于vue开发h5项目过程中使用支付宝和微信支付过程中的重点与槽点,仅为前端部分,如有疏漏不正之处,请于文末评论探讨.注意:标红部分灰常重要,仔细阅读官方文档非常重要,耐心非常重要,细心非常 ...
- vue和Java做数据交互_基于vue和springmvc前后端分离,json类接口调用介绍
基于vue和springmvc前后端分离,json类接口调用介绍 版本要求:spring-3.2.9.RELEASE.vue-2.9.2.axios-0.17.1,其中axios作为http clie ...
- 基于vue的响应式ui框架_基于Vue.js的响应式和可配置UI框架
基于vue的响应式ui框架 Framevuerk (Framevuerk) Fast, Responsive, Multi Language, Both Direction Support and C ...
- vue实现搜索框搜索新增_基于Vue el-autocomplete 实现类似百度搜索框功能_含真_前端开发者...
效果图如下所示: 首先上代码 让数据触手可及 class="inline-input search-input" v-model="searchContent" ...
- vue实现留言板的功能_基于vue和bootstrap实现简单留言板功能
本文实例为大家分享了vue实现简单留言板功能的具体代码,供大家参考,具体内容如下 作为一个刚开始接触vue的前端小白,我想在这里记录一些学习过程,希望和大家一起进步,如有不妥处之处,请多多指教呦. 今 ...
- vue可视化拖拽组件模板_基于 Vue 丝滑般拖拽排序组件VueSlicksort
今天给大家分享一个功能超强的自由拖拽排序组件VueSlicksort. vue-slicksort 一款功能强大的可拖拽的vue.js组件.拥有丝滑般拖拽动画效果,支持水平/垂直/网格拖拽排序.还可以 ...
最新文章
- Python高级爬虫开发,高难度JS解密教程,绝地求生模拟登陆!
- 招青年博士,年薪70-80万,200万以上补贴,直聘博导!苏州大学
- copy一下面试题目
- module 'itertools' has no attribute 'izip'
- VTK:PolyData之AttachAttributes
- Hadoop 大数据平台架构与实践
- Oulipo(POJ-3461)
- Hyper-V动态扩展或差异磁盘体积缩小技巧
- RK3288开发过程中遇到的问题点和解决方法之Packages
- GoldenGate碎碎念
- Wi-Fi连接握手包抓包
- 计算机桌面最下面的横条怎么去掉,win7系统桌面出现横条如何去除?桌面出现横条去除方法...
- idea中html导入背景图片,IDEA设置导入主题样式皮肤,加入背景图片
- word文档设置页眉页脚的技巧
- 【干货】9个网络故障排除经典案例,网工都得会
- 《谁动了我的奶酪》感悟
- 数据库中delete和drop的区别
- android 音乐播放器关于歌词的处理
- C语言中的引用,以及传递引用,数组传递
- Parasoft全面发布最广泛的MISRA规则覆盖
热门文章
- Java-009-数组和日期时间类(Date,Calendar)详解
- 【Java】花费数十小时,带你体验Java文档搜索引擎的实现过程
- 苹果与华为领衔 全球科技巨头进军AI手机领域
- 如何用计算机设计衣服,怎样才能成为出色的服装设计师_电脑服装设计图怎么画...
- Wenli Zou's homepage
- 代码随想录训练营day7
- Linux强制使用短密码|修改短密码|passwd无效的密码
- android中帧布局效果,Android开发实现布局帧布局霓虹灯效果示例
- ai前世识别_ai人脸识别前世今生app
- 函数:GetDistance,计算两个经度纬度之间距离