微信小程序踩坑,不定时更新

emmmm,觉得自己小程序太薄弱了,所以还是找个东西练手,不过还是要感谢某大神提供的“扒小程序”的方法,虽然不是说拿下来就能用,但是作为仿小程序来说,我要的图片素材,页面名称都有了.

地址贴出来:https://blog.csdn.net/yuzsmc/article/details/82785466 (不一定适合每个人用,看情况吧)

接下来看看我这两天踩的坑(小程序太久没接触了,跟刚学差不多)

1.this.setData报错

这个问题大多数人都踩过坑了,原因就是在于wx.request 返回东西之后,success相当于一个内部闭包,this.data是拿不到东西的,所以需要在他之外着重声明一下\'var that= this\',或者你想用_this也行。

2.关于怎么渲染循环数据。

从一进小程序的时候就需要把数据库数据查出来渲染到页面的公共data上面,或许你可以定个list:[],然后再试渲染页面。跟着就是用wx:for="{{array}}",这点跟vue.js有些相似。然后,有个wx:for-item是用来指定‘数组当前元素变量名’的,看着名字解释有点懵逼,但是看文档eg之后就知道了,栗子是这样的:{{item.name}},也就是说当wx:for-item="gushengyan"的时候,渲染列表元素就应该是{{gushengyan.name}},然后还有个wx:for-index,用来指定下标,这个在我踩的第三个坑会用到。

3.如何改变循环列表中某个元素属性(class或者style , 主要是视图变化)

举个简单的例子,在一堆循环下来的女明星ABCDE和何洁中,你要给何洁投票,每个头像旁边有个投票按钮,点击一下,发送请求到后台,后台完成数据库修改返回,前端接收到返回的数据之后需要处理,当res.data.code==200的时候,需要把前端那个投票的按钮显示为已投票,怎么做呢?我看到有人的方法是又循环所有的list,重新赋值list,emmm,个人认为不可取,万一有那么几千几万个,可能会比较影响性能,就想改变那一个就行了,那么问题来了,怎么找到那个元素?this?不行,that?不行,也不能用jQuery,$(this)更不要想; ——想想刚才用指定的下标,我们暂且叫它Index,var Index = datas.currentTarget.dataset.index,打印一下发现真的是下标,好了,列表下标获取到了,也就是在指定的list列表里的第Index个数组元素里就是我需要变更的数据,怎么找到呢?

我先这么试了下:

that.setData({
   list[Index].attend:res.data.vote
})
that.setData({
   “list[“+Index+”].attend”:res.data.vote
})

这都不用看,直接报错,根本不用点击,好吧,外面加引号试试:

that.setData({
   “list[Index].attend”:res.data.vote
})

这样子,不点击的时候是不报错的,点击之后就报错

后来百度到一个方法,亲测好使:https://blog.csdn.net/abc564643122/article/details/79580759

然后我也改改我的方法:

          success(res) {
          if(res.data.code==200){
            var change = "list["+Index+"].vote";
            that.setData({
              [change]:res.data.data.vote
            })
          }
          }

搞定。