当前位置:   article > 正文

新闻资讯APP——Searchpage.vue组件

searchpage

新闻资讯APP——Searchpage.vue组件

重点摘录:

  1. 使用layui实现弹窗,点击搜索是,如果文本框的内容为空,弹出请输入检索内容

  • 效果:

  • 步骤:

    step1:安装

Markup

  1. cnpm install layui-layer --save
  2. cnpm install jquery --save

    

        step2:在index.html中引入

Markup

    step3:入口文件

Markup

  1. 周期 - 创建完成(可以访问当前this实例)
  2. created() {
  3. // layui入口文件
  4. const _this = this;
  5. layui.use('layer',function(){
  6. _this.layer = layui.layer
  7. })
  8. },

    step4:使用

Markup

  1. else{
  2. this.layer.msg('请输入搜索内容',{time:2000})
  3. }

2.使用本地存储,减少对HTTP请求,并且把localStorage中 的本地存储数据显示视图层,历史记录中

  • 效果:

  • localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

  • localStorage方法

localStorage.getItem(key):获取指定key本地存储的值

eg:

Markup

  1. 获取指定key---thehistory本地存储的值
  2. localStorage.getItem('thehistory')

localStorage.setItem(key,value):将value存储到key字段

eg:

Markup

  1. 将value存储到key---thehistory字段
  2. localStorage.setItem('thehistory',JSON.stringify(history));

localStorage.removeItem(key):删除指定key本地存储的值

eg:

Markup

  1. 删除指定key---thehistory本地存储的值
  2. localStorage.removeItem('thehistory')

效果 :

3.本地存储文件里的内容为字符串,在进行操作的时候要进行转换成js对象,换句话说也把业务,逻辑层的数据存储到本地存储中,也要相对应的转化成字符串

JSON 通常用于与服务端交换数据。 

在接收服务器数据时一般是字符串。

 JSON.parse() 方法将字符串转换为 JavaScript 对象 

 JSON.stringify 将js对象转化为字符串

eg:

Markup

  1. let getItem = JSON.parse(localStorage.getItem('thehistory'))
  2. localStorage.setItem('thehistory',JSON.stringify(history))

代码:

Markup

  1. <template>
  2. <div>
  3. <div>
  4. <i class="fa fa-chevron-left left" aria-hidden="true"></i>
  5. <div>
  6. <i class="fa fa-search searchicon" aria-hidden="true"></i>
  7. <input type="text" placeholder="请输入关键字..." v-model="searchword">
  8. </div>
  9. <span @click="toSearch">搜索</span>
  10. </div>
  11. <div id="content">
  12. <div>
  13. <div class="history content" >
  14. <div>
  15. 历史记录
  16. <div>
  17. <i class="fa fa-trash-o" aria-hidden="true" @click="deleteHistory"></i>
  18. </div>
  19. </div>
  20. <ul>
  21. <!-- 从本地存储的中拿的数据 -->
  22. <li v-for="item in searcharr">{{item}}</li>
  23. </ul>
  24. </div>
  25. <div class="history content">
  26. <div>
  27. 猜你想搜的
  28. <div>
  29. <i aria-hidden="true"></i>
  30. </div>
  31. </div>
  32. <ul v-if="showwant">
  33. <li v-for="(item,index) in youwant" @click="toResultPage(item)">{{item}}</li>
  34. </ul>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. </template>
  40. <script>
  41. export default {
  42. name: '',
  43. components: {},
  44. data() {
  45. //这里存放数据
  46. return {
  47. layer:null,
  48. showdefault:true,
  49. showwant:true,
  50. searchword:'',
  51. searcharr:[],
  52. youwant:['5G','华为新机','滴滴','恒大全面大降价','中国最厉','德安东尼','应采儿','黄磊','冯绍峰','赵丽颖','地中海']
  53. };
  54. },
  55. //监听属性 类似于data概念
  56. computed: {},
  57. //监控data中的数据变化
  58. watch: {},
  59. //方法集合
  60. methods: {
  61. toResultPage(item){
  62. this.$router.push({path:'/resultpage',query:{searchword:item}})
  63. },
  64. toSearch(){
  65. // 如果搜索的文本框有值 存储在本地存储 否则弹出警告
  66. if(this.searchword != ''){
  67. // 1.存放每次输入的内容
  68. let history=[];
  69. // 2.在localStorage定义一个key字段,起个名字叫TheHistory,把字符串转
  70. // 化为js对象
  71. let getItem = JSON.parse(localStorage.getItem('TheHistory'));
  72. // 3.如果为空,把文本框输入的内容压入history数组中
  73. if(getItem == null){
  74. history.push(this.searchword)
  75. }
  76. // 不为空,说明原来的getItem已经有内容,在把新内容压入getItem之后,
  77. // 赋值给history中
  78. else{
  79. if(getItem.indexOf(this.searchword) == -1){
  80. getItem.push(this.searchword)
  81. }
  82. history = getItem
  83. }
  84. //4. 把history数组中的内容,存放在本地的key字段TheHistory中
  85. localStorage.setItem('TheHistory',JSON.stringify(history))
  86. this.$router.push({path:'/resultpage',query:{searchword:this.searchword}})
  87. }
  88. else{
  89. this.layer.msg('请输入搜索内容',{time:2000})
  90. }
  91. // 搜索内容,要跳转到 resultPage页面中
  92. },
  93. // 获取本地存储的数据
  94. getHistory(){
  95. if(localStorage.getItem('TheHistory')){
  96. this.searcharr = JSON.parse(localStorage.getItem('TheHistory'));
  97. console.log(this.searcharr)
  98. }
  99. },
  100. // 删除历史记录,
  101. deleteHistory(){
  102. // 1. 清除本地存储中的内容
  103. localStorage.removeItem('TheHistory');
  104. // 2.q清除数据中心searcharr[]的内容
  105. this.searcharr = []
  106. }
  107. },
  108. //生命周期 - 创建完成(可以访问当前this实例)
  109. created() {
  110. const _this = this;
  111. layui.use('layer',function(){
  112. _this.layer = layui.layer
  113. })
  114. },
  115. //生命周期 - 挂载完成(可以访问DOM元素)
  116. mounted() {
  117. this.$nextTick(function(){
  118. this.getHistory()
  119. })
  120. },
  121. beforeCreate() {}, //生命周期 - 创建之前
  122. beforeMount() {}, //生命周期 - 挂载之前
  123. beforeUpdate() {}, //生命周期 - 更新之前
  124. updated() {}, //生命周期 - 更新之后
  125. beforeDestroy() {}, //生命周期 - 销毁之前
  126. destroyed() {}, //生命周期 - 销毁完成
  127. activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
  128. }
  129. </script>
  130. <style lang='' scoped>
  131. .contain{
  132. width:100%;
  133. height:100%;
  134. overflow:hidden;
  135. position: relative;
  136. }
  137. .contain .header{
  138. background:#d33d3e;
  139. padding:7px 10px;
  140. }
  141. .contain .header .left{
  142. color:#fff;
  143. line-height:32px;
  144. vertical-align:middle;
  145. margin-right:10px;
  146. }
  147. .contain .header .header_search{
  148. display:inline-block;
  149. width:calc(100% - 80px);
  150. line-height:32px;
  151. vertical-align:middle;
  152. margin-right:10px;
  153. background: #fff;
  154. border-radius: 5px;
  155. }
  156. .contain .header .header_search .searchicon{
  157. color:#707070;
  158. margin:0 5px 0 5px;
  159. }
  160. .contain .header .header_search input{
  161. border:none;
  162. outline:none;
  163. width:calc(100% - 30px);
  164. }
  165. .contain .header .searchbtn{
  166. display:inline-block;
  167. width:30px;
  168. line-height:32px;
  169. vertical-align: middle;
  170. color:#fff;
  171. font-weight:600;
  172. font-size:15px;
  173. }
  174. .contain #content{
  175. width:100%;
  176. }
  177. .contain #content .content{
  178. margin-top:20px;
  179. }
  180. .contain #content .content .tit{
  181. line-height:25px;
  182. height:25px;
  183. vertical-align: middle;
  184. font-size:15px;
  185. color:#707070;
  186. padding:0 15px;
  187. }
  188. .contain #content .content .tit_right{
  189. float:right;
  190. }
  191. .contain #content .content .tit_right i{
  192. font-size:16px;
  193. color:#707070;
  194. }
  195. .contain #content .content .con_main{
  196. width:100%;
  197. margin-top:5px;
  198. }
  199. .contain #content .content .con_main li{
  200. box-sizing: border-box;
  201. width:50%;
  202. display:inline-block;
  203. line-height:30px;
  204. border-bottom:1px solid #e8e8e8;
  205. padding-left:15px;
  206. }
  207. .contain #content .content .con_main li:nth-child(1){
  208. border-top:1px solid #e8e8e8;
  209. }
  210. .contain #content .content .con_main li:nth-child(2){
  211. border-top:1px solid #e8e8e8;
  212. }
  213. .contain #content .content .con_main li:nth-child(odd){
  214. border-right:1px solid #e8e8e8;
  215. }
  216. </style>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/396339
推荐阅读
相关标签
  

闽ICP备14008679号