开始

搜索页目前没法搜索
image.png

image.png
先来配置页面,希望可以上拉刷新,隐藏它的滚动条。
开启下拉刷新。
image.png

  1. "enablePullDownRefresh": true,

滚动条和回弹已经关了
image.png

可以下拉刷新
image.png
用首页的这种样式
image.png
引入首页也引用的indexList组件。
image.png

  1. import indexList from '@/components/index/index-list.vue';

复制首页的list的数据。
image.png

  1. list: [{
  2. userpic: "../../static/demo/userpic/12.jpg",
  3. username: "昵称",
  4. isguanzhu: false,
  5. title: "我是标题",
  6. type: "img", // img:图文,video:视频
  7. titlepic: "../../static/demo/datapic/11.jpg",
  8. infonum: {
  9. index: 0, //0:没有操作,1:顶,2:踩;
  10. dingnum: 11,
  11. cainum: 11,
  12. },
  13. commentnum: 10,
  14. sharenum: 10,
  15. },
  16. {
  17. userpic: "../../static/demo/userpic/12.jpg",
  18. username: "昵称",
  19. isguanzhu: true,
  20. title: "我是标题",
  21. type: "video", // img:图文,video:视频
  22. titlepic: "../../static/demo/datapic/11.jpg",
  23. playnum: "20w",
  24. long: "2:47",
  25. infonum: {
  26. index: 1, //0:没有操作,1:顶,2:踩;
  27. dingnum: 11,
  28. cainum: 11,
  29. },
  30. commentnum: 10,
  31. sharenum: 10,
  32. }
  33. ]

image.png

  1. <block v-for="(item,index) in list" :key="index">
  2. <index-list :item="item" :index="index"></index-list>
  3. </block>

image.png
复制首页空数据显示的组件
image.png

  1. <template v-else>
  2. <no-thing></no-thing>
  3. </template>

image.png

  1. import noThing from '@/components/common/no-thing.vue';

image.png

  1. <template v-if="list.length>0">
  2. <block v-for="(item,index) in list" :key="index">
  3. <index-list :item="item" :index="index"></index-list>
  4. </block>
  5. </template>

否则显示空
image.png

  1. <template v-else>
  2. <no-thing></no-thing>
  3. </template>

复制上拉加载
image.png

  1. <!-- 上拉加载 -->
  2. <load-more :loadtext="items.loadtext"></load-more>

image.png

  1. import noThing from '@/components/common/no-thing.vue';
  2. noThing

放在最外层
image.png

  1. loadtext:'上拉加载更多',

image.png

  1. <load-more :loadtext="items.loadtext"></load-more>

换成当前页面的属性变量
image.png

  1. <load-more :loadtext="loadtext"></load-more>

监听上拉加载
复制首页的loadMore方法。
image.png

image.png

这里我们不传任何值
image.png
这些都改成当前页的数据
image.png

  1. // 上拉加载
  2. loadmore() {
  3. if (this.loadtext != "上拉加载更多") {
  4. return;
  5. }
  6. // 修改状态
  7. this.loadtext = "加载中...";
  8. // 获取数据
  9. setTimeout(() => {
  10. //获取完成
  11. let obj = {
  12. userpic: "../../static/demo/userpic/12.jpg",
  13. username: "昵称",
  14. isguanzhu: false,
  15. title: "我是标题",
  16. type: "img", // img:图文,video:视频
  17. titlepic: "../../static/demo/datapic/11.jpg",
  18. infonum: {
  19. index: 0, //0:没有操作,1:顶,2:踩;
  20. dingnum: 11,
  21. cainum: 11,
  22. },
  23. commentnum: 10,
  24. sharenum: 10,
  25. };
  26. this.list.push(obj);
  27. this.loadtext = "上拉加载更多";
  28. }, 1000);
  29. // this.loadtext="没有更多数据了";
  30. }

image.png

  1. onReachBottom() {
  2. this.loadmore();
  3. },

搜索事件
image.png
来模拟后端加载的数据
image.png
image.png

image.png

image.png

image.png
image.png

  1. // 搜索事件
  2. getdata() {
  3. uni.showLoading({
  4. title: '加载中',
  5. mask: false
  6. });
  7. // 请求服务器 post keyword:val
  8. setTimeout(() => {
  9. let arr = [{
  10. userpic: "../../static/demo/userpic/12.jpg",
  11. username: "昵称",
  12. isguanzhu: false,
  13. title: "我是标题",
  14. type: "img", // img:图文,video:视频
  15. titlepic: "../../static/demo/datapic/11.jpg",
  16. infonum: {
  17. index: 0, //0:没有操作,1:顶,2:踩;
  18. dingnum: 11,
  19. cainum: 11,
  20. },
  21. commentnum: 10,
  22. sharenum: 10,
  23. },
  24. {
  25. userpic: "../../static/demo/userpic/12.jpg",
  26. username: "昵称",
  27. isguanzhu: true,
  28. title: "我是标题",
  29. type: "video", // img:图文,video:视频
  30. titlepic: "../../static/demo/datapic/11.jpg",
  31. playnum: "20w",
  32. long: "2:47",
  33. infonum: {
  34. index: 1, //0:没有操作,1:顶,2:踩;
  35. dingnum: 11,
  36. cainum: 11,
  37. },
  38. commentnum: 10,
  39. sharenum: 10,
  40. }
  41. ];
  42. this.list = arr;
  43. uni.hideLoading();
  44. this.issearch = true;
  45. }, 1000);
  46. },

image.png

  1. // 监听点击搜索按钮事件
  2. onNavigationBarSearchInputConfirmed(e) {
  3. if (e.text) {
  4. this.getdata(e.text);
  5. }
  6. },

image.png
这个是取消按钮
image.png

  1. // 监听搜索框文本变化
  2. onNavigationBarSearchInputChanged(e) {
  3. if (e.text) {
  4. this.getdata(e.text);
  5. }
  6. },

image.png
有值才传过去
image.png

监听搜索框的变化。
image.png

  1. // 监听搜索框文本变化
  2. onNavigationBarSearchInputChanged(e) {
  3. if (e.text) {
  4. this.getdata(e.text);
  5. }
  6. },

默认的数据就可以删了
image.png
默认的显示。、
image.png
输入关键字搜索
image.png

判断用户是否点击了搜索

image.png

  1. issearch:false,

image.png

  1. <template v-else-if="issearch && list.length<1">
  2. <no-thing></no-thing>
  3. </template>

点击搜索后,设置为true
image.png

  1. // 监听点击搜索按钮事件
  2. onNavigationBarSearchInputConfirmed(e) {
  3. console.log("监听点击搜索按钮事件" + JSON.stringify(e.text));
  4. if(e.index){
  5. this.issearch=true;
  6. this.getdata(e.index);
  7. }
  8. },

默认是空的,
image.png
也可以放到请求服务器之后。再设置为true
image.png

  1. uni.hideLoading();
  2. this.issearch = true;

搜索到的数据如果为空
image.png

搜索不到的情况
image.png

本节代码

  1. <template>
  2. <view>
  3. <template v-if="list.length>0">
  4. <block v-for="(item,index) in list" :key="index">
  5. <index-list :item="item" :index="index"></index-list>
  6. </block>
  7. <!-- 上拉加载 -->
  8. <load-more :loadtext="loadtext"></load-more>
  9. </template>
  10. <template v-else-if="issearch && list.length<1">
  11. <no-thing></no-thing>
  12. </template>
  13. </view>
  14. </template>
  15. <script>
  16. import indexList from '@/components/index/index-list.vue';
  17. import loadMore from '@/components/common/load-more.vue';
  18. import noThing from '@/components/common/no-thing.vue';
  19. export default {
  20. components: {
  21. indexList,
  22. loadMore,
  23. noThing
  24. },
  25. data() {
  26. return {
  27. issearch:false,
  28. loadtext: '上拉加载更多',
  29. list: []
  30. }
  31. },
  32. // 监听原生标题导航按钮点击事件
  33. onNavigationBarButtonTap(e) {
  34. if (e.index == 0) {
  35. uni.navigateBack({
  36. delta: 1
  37. });
  38. }
  39. },
  40. // 监听搜索框文本变化
  41. onNavigationBarSearchInputChanged(e) {
  42. console.log("监听点击搜索按钮事件" + JSON.stringify(e.text));
  43. },
  44. // 监听点击搜索按钮事件
  45. onNavigationBarSearchInputConfirmed(e) {
  46. console.log("监听点击搜索按钮事件" + JSON.stringify(e.text));
  47. if(e.index){
  48. this.issearch=true;
  49. this.getdata(e.index);
  50. }
  51. },
  52. onReachBottom() {
  53. this.loadmore();
  54. },
  55. // 监听点击搜索按钮事件
  56. onNavigationBarSearchInputConfirmed(e) {
  57. if (e.text) {
  58. this.getdata(e.text);
  59. }
  60. },
  61. // 监听搜索框文本变化
  62. onNavigationBarSearchInputChanged(e) {
  63. if (e.text) {
  64. this.getdata(e.text);
  65. }
  66. },
  67. methods: {
  68. // 搜索事件
  69. getdata() {
  70. uni.showLoading({
  71. title: '加载中',
  72. mask: false
  73. });
  74. // 请求服务器 post keyword:val
  75. setTimeout(() => {
  76. let arr = [{
  77. userpic: "../../static/demo/userpic/12.jpg",
  78. username: "昵称",
  79. isguanzhu: false,
  80. title: "我是标题",
  81. type: "img", // img:图文,video:视频
  82. titlepic: "../../static/demo/datapic/11.jpg",
  83. infonum: {
  84. index: 0, //0:没有操作,1:顶,2:踩;
  85. dingnum: 11,
  86. cainum: 11,
  87. },
  88. commentnum: 10,
  89. sharenum: 10,
  90. },
  91. {
  92. userpic: "../../static/demo/userpic/12.jpg",
  93. username: "昵称",
  94. isguanzhu: true,
  95. title: "我是标题",
  96. type: "video", // img:图文,video:视频
  97. titlepic: "../../static/demo/datapic/11.jpg",
  98. playnum: "20w",
  99. long: "2:47",
  100. infonum: {
  101. index: 1, //0:没有操作,1:顶,2:踩;
  102. dingnum: 11,
  103. cainum: 11,
  104. },
  105. commentnum: 10,
  106. sharenum: 10,
  107. }
  108. ];
  109. this.list = arr;
  110. uni.hideLoading();
  111. this.issearch = true;
  112. }, 1000);
  113. },
  114. // 上拉加载
  115. loadmore() {
  116. if (this.loadtext != "上拉加载更多") {
  117. return;
  118. }
  119. // 修改状态
  120. this.loadtext = "加载中...";
  121. // 获取数据
  122. setTimeout(() => {
  123. //获取完成
  124. let obj = {
  125. userpic: "../../static/demo/userpic/12.jpg",
  126. username: "昵称",
  127. isguanzhu: false,
  128. title: "我是标题",
  129. type: "img", // img:图文,video:视频
  130. titlepic: "../../static/demo/datapic/11.jpg",
  131. infonum: {
  132. index: 0, //0:没有操作,1:顶,2:踩;
  133. dingnum: 11,
  134. cainum: 11,
  135. },
  136. commentnum: 10,
  137. sharenum: 10,
  138. };
  139. this.list.push(obj);
  140. this.loadtext = "上拉加载更多";
  141. }, 1000);
  142. // this.loadtext="没有更多数据了";
  143. }
  144. }
  145. }
  146. </script>
  147. <style>
  148. </style>

结束