要实现的页面效果:

 

  1.显示历史搜索,

  2.最近搜索的排在最前,

  2.最多显示8条历史

  4.清空历史记录

思路:

  1.首先显示历史记录需要一个数组searchItems,通过ng-repeat显示每一个<li>

 <label class="item item-input input-search">
<input ng-focus="showSearch(i)" ng-blur="hideSearch(i)" type="text" ng-model="searchName" placeholder="">
<button class="button button-small button-search-jd" on-tap="search()">{{'jifen.search' | i18next}}</button>
</label>
<div ng-show="searchHistory" class="search-history-wrap">
<p><i class="icon ion-ios-clock-outline"></i>&nbsp;{{'jifen.recentSearch' | i18next}}</p>
<ul class="search-history-list">
<li ng-repeat="sItem in searchItems" on-tap="historyName($event)">{{sItem}}</li>
<!--<li>杯子</li>
<li>电脑</li>
<li>笔记本</li>
<li>金龙鱼食用油</li>
<li>杯子</li>
<li>电脑</li>
<li>笔记本</li>
<li>金龙鱼食用油</li>-->
</ul>
<p class="text-right">
<button class="button button-outline button-light del-search" on-tap="delSearch()">{{'jifen.delSearch' | i18next}}</button>
</p>
</div>

    注:关于搜索实现,见:angularjs+ionic的app端分页和条件

  2.js实现

//商城列表-搜索历史弹框
$scope.searchHistory=false;
$scope.searchItems = [];//初始化历史列表数组
$scope.showSearch = function(i) { $scope.searchHistory=true; };
$scope.hideSearch = function(i) { $scope.searchHistory=false; };

  每次搜索都会想数组$scope.searchItems中添加搜索的记录searchName,并且做判断,1.最多8条记录;2.最近搜索的添加在数组头部;3如果搜索历史中已经有,则不添加,但替换到最前位置。

        //搜索事件
$scope.search = function() {
if($scope.searchName != undefined && $scope.searchName != "" && $scope.searchName != null) {
sName = $scope.searchName;
currentPage = 0;
// intData = [];
intData.splice(0,intData.length);//清空数组
$scope.loadMore(); //搜索记录
if($scope.searchItems.length < 8 && $scope.searchItems.indexOf(sName) < 0){//$scope.searchItems.indexOf(sName),类似string的方法,获取索引坐标
$scope.searchItems.unshift(sName);//向数组的开头添加一个或更多元素,并返回新的长度
}else if($scope.searchItems.length >= 8 && $scope.searchItems.indexOf(sName) < 0){
$scope.searchItems.pop();//删除并返回数组的最后一个元素
$scope.searchItems.unshift(sName);
}else if($scope.searchItems.indexOf(sName) >= 0){
$scope.searchItems.splice($scope.searchItems.indexOf(sName),1);
$scope.searchItems.unshift(sName);
}
}
}

  点击列表中的某一个,会跳转搜索

//历史搜索
$scope.historyName = function(event) {
$scope.searchName = event.target.innerHTML;
$scope.search();
}

    注:绑定在 li 上的方法:on-tap="historyName($event)",接受 $event 参数,你可以利用它获取当前被点击的 li

  清空搜索记录:

//清空搜索记录
$scope.delSearch = function() {
$scope.searchItems.splice(0,$scope.searchItems.length);//清空数组
}

参考:

  JS数组的方法api:http://www.w3school.com.cn/jsref/jsref_obj_array.asp

  AngularJS如何添加的DOM元素且能绑定事件:https://segmentfault.com/q/1010000002957477

  splice()方法:http://www.jb51.net/article/33306.htm

前端实现搜索历史和清空历史(angularjs+ionic)的更多相关文章

  1. Git清空历史,清空历史删除的文件,降低.git 文件大小

    执行以下步骤之前 请做好源码备份 本操作用来清理github上面的历史删除文件,减少库的体积. 第一步骤 下载JDK环境和JAR包 https://rtyley.github.io/bfg-repo- ...

  2. js实现前端的搜索历史记录

    最近在对接前台页面(WEB端)时,产品要求需记录下客户的搜索记录,我们是前后台完全分离的项目,根本不能保存的session域中,没办法,虽然作为后台开发,遇到需求就自己研究了一通,先看一下最终效果图, ...

  3. Cordova+Angularjs+Ionic 混合开发入门讲解

    作为一名学习Android开发的学生,对于移动开发的发展趋势颇为关注,大家都知道,现在原生的移动开发在企业上基本很少使用了,大部分企业为了降低成本,选择了webapp,hybrid(混合开发)这两种模 ...

  4. 搭建 AngularJS+Ionic+Cordova 开发环境并运行一个demo

    目前的手机APP有三类:原生APP,WebAPP,HybridApp:HybridApp结合了前两类APP各自的优点,越来越流行. Cordova就是一个中间件,让我们把WebAPP打包成Hybrid ...

  5. angularJs ionic phoneGap 分享

    由于坑较多 就如“天下难事,必作于易吧” 最近有机会接触到了git  node angularJs ionic phoneGap 很开森也很痛苦 分享如下 推荐的几个博客地址: ionic开发插件之n ...

  6. AngularJS+Ionic开发-1.搭建开发环境

    临时项目需要使用AngularJS+Ionic+Cordova技术,半年前跟别人用过一段时间做过几个页面,目前别人已经无法联系了,只能我自己上了. 上次做完项目后,想抽时间好好巩固一下这方面的知识面来 ...

  7. linux 清空历史命令

    系统版本:CentOS 6 history -c 命令可以清空当前窗口的历史输出命令. 要彻底删除历史命令可以有如下几种方式: 在当前用户的-目录下执行: 方式1: echo > .bash_h ...

  8. android AutoCompleteTextView 实现手机号格式化,附带清空历史的操作

    有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能.同时要具备手机格式化的功能.下拉列表最后一行是有个清除历史的功能.可是点击“清除历史”却把文字要设置进去A ...

  9. 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite

    一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象, ...

随机推荐

  1. hibernate_exercise-many- to-one(1)

    多对一关系 1.创建t_user表.t_group表 2.在eclipse中创建对应的实体类 package com.eneity; public class User { private int i ...

  2. SpringCloud用户自定义配置信息的定义和查看

    一.概念 在SpringCloud项目中,用户自己定义的配置信息也可以放在application.*,需要以 info打头,以便使用公用基础设施 /info 查看! 本文讲解基于 ConfigServ ...

  3. Docker学习笔记 - Docker的容器

    docker logs  [-f]  [-t]  [--tail]  容器名 -f -t --tail="all" 无参数:返回所有日志 -f 一直跟踪变化并返回 -t 带时间戳返 ...

  4. apigw鉴权分析(1-4)新浪微博开放平台 - 鉴权分析

    一.访问入口 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 微博开放接口的调用,如 ...

  5. java集合小知识的复习

    *Map接口 Map<k,v>接口中接收两个泛型,key和value的两个数据类型 Map中的集合中的元素都是成对存在的每个元素由键与值两部分组成,通过键可以找对所对应的值.值可以重复,键 ...

  6. Android学习——移植tr069程序到Android平台

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...

  7. hdu1568 Fibonacci---前4位

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1568 题目大意: 求斐波那契数列第i项的前四位.i<1e8 思路: 由于数据范围大,不可能打表 ...

  8. C++的三大特性:封装、继承和多态性的详解

    封装 所谓封装就是将某些东西包装盒隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问.封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口以及特定的访问权限来使 ...

  9. [机器学习Lesson4]多元线性回归

    1. 多元线性回归定义 多元线性回归也被称为多元线性回归. 我们现在介绍方程的符号,我们可以有任意数量的输入变量. 这些多个特征的假设函数的多变量形式如下: hθ(x)=θ0+θ1x1+θ2x2+θ3 ...

  10. Plupload 上传控件使用指南

    本文转载至(感谢原作者分享):http://www.cnblogs.com/2050/p/3913184.html#plupload_doc2 我之前写过一篇文章<文件上传利器SWFUpload ...