轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 微信小程序 查看主题

微信小程序读取本地数据,列表循环

发布者: miyoko | 发布时间: 2018-5-7 05:15| 查看数: 5997| 评论数: 1|帖子模式

一:小程序读取本地数据

 
一般情况下,小程序的utils这个文件夹下,我们可以把本地的数据写进去,封装成.js文件,提供对外暴露的接口,然后读取本地数据。如果涉及到一些针对这些数据的处理方法,也可以把方法写好,封装到.js文件里面,然后需要时调用。

  1. module.exports = {
  2. mtData: mtData,
  3. searchmtdata: searchmtdata,
  4. usedraw: usedraw
  5. }
  6. var mt_data = mtData()
  7. function searchmtdata(id) {
  8. var result
  9. for (let i = 0; i < mt_data.list.length; i++) {
  10. var mt = mt_data.list[i]
  11. if (mt.id == id) {
  12. result = mt
  13. }
  14. }
  15. return result || {}
  16. }
  17. function mtData() {
  18. var arr = {
  19. list: [
  20. {
  21. id: '1',
  22. MTId: 'MT001',
  23. status: 'working',
  24. Duration: 3,
  25. Operator: 'tom',
  26. IdleReason: 'lunch'
  27. }, {
  28. id: '2',
  29. MTId: 'MT002',
  30. status: 'Idle',
  31. Duration: 7,
  32. Operator: 'jerry',
  33. IdleReason: 'reparied'
  34. }, {
  35. id: '3',
  36. MTId: 'MT003',
  37. status: 'Idle',
  38. Duration: 6,
  39. Operator: 'tom',
  40. IdleReason: 'lunch'
  41. }, {
  42. id: '4',
  43. MTId: 'MT004',
  44. status: 'working',
  45. Duration: 9,
  46. Operator: 'jerry',
  47. IdleReason: 'reparied'
  48. }, {
  49. id: '5',
  50. MTId: 'MT005',
  51. status: 'Idle',
  52. Duration: 2,
  53. Operator: 'tom',
  54. IdleReason: 'lunch'
  55. }, {
  56. id: '6',
  57. MTId: 'MT006',
  58. status: 'working',
  59. Duration: 6,
  60. Operator: 'jerry',
  61. IdleReason: 'reparied'
  62. }, {
  63. id: '7',
  64. MTId: 'MT007',
  65. status: 'Idle',
  66. Duration: 1,
  67. Operator: 'tom',
  68. IdleReason: 'lunch'
  69. }
  70. ]
  71. }
  72. return arr
  73. }

如上面的代码片段所示,function mtData写好的本地数据,其中包含对象List。另外还有一个function searchmtdata,这个方法是根据传参的不同加载具体的数据,接下来会用到,方法和数据都写好后,需要写一个对外暴露的接口:

  1. module.exports = {
  2. mtData: mtData,
  3. searchmtdata: searchmtdata,
  4. usedraw: usedraw
  5. }

在其他页面调用data文件(一般是在js文件里面)

  1. var fileData = require('../../utils/data.js')
  2. Page({
  3. data: {
  4. showData: fileData.mtData().list,
  5. },
  6. })

像上面的示例一样,在data{}中赋值后,showData就可以直接在wxml中显示了。

二:列表循环

 
让我们先看看代码

.wxml 代码

  1. <block wx:for="{{items}}">
  2. <label><checkbox />{{item.title}}</label>
  3. </block>
  4. <button bindtap="chng">变更项</button>

.js 代码

  1. data: {
  2. items: [
  3. {
  4. id: 1,
  5. title: "a"
  6. },
  7. {
  8. id: 2,
  9. title: "b",
  10. },
  11. {
  12. id: 3,
  13. title: "c",
  14. }
  15. ]
  16. },
  17. chng: function(e){
  18. this.setData({
  19. items: [
  20. {
  21. id: 2,
  22. title: "b"
  23. },
  24. {
  25. id: 1,
  26. title: "a",
  27. },
  28. {
  29. id: 3,
  30. title: "c",
  31. }
  32. ]
  33. })
  34. }

效果如下:

点击按钮“变更项”前,我们选中第二项,即 b 那一项。效果如下: 

点击按钮“变更项”后,我们改变了 items 项的顺序。效果如下: 

虽然字母顺序变了,但是选择项没有变。

如果我们希望用户输入也跟随,则使用wx:key

wx:key 指定 items 中一个具有唯一值的属性,比如我们这里的 id,

将 <block wx:for="{{items}}"> 改为 <block wx:for="{{items}}"wx:key="id">,注意:是 wx:key="id",不是 wx:key="{{id}}"。

此时,点击按钮“变更项”后,我们改变了 items 项的顺序。效果如下:

以上只是改变顺序,如果是改变 items 元素个数,道理一样的。

再细化一下,如果我们对 checkbox 使用了 checked="{{checked}}",而 setData 赋新值时为数组元素设置了:{ id:2, checked:false, title:"b" }, 而在点按钮之前又选中了 b,点按钮后,是继续选中 b,还是听新值的呢?听新值的。

那新值不要 checked 属性,是不是就继续选中 b 呢?也不是,因为没有赋值,对 {{checked}} 来说,相当于 false(boolean 默认值是 false)。

最新评论

✧꧁承诺꧂✧ 发表于 2022-6-13 16:40
音乐在线下载网站源码

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表