收藏
回答

使用wx.showModal中success函数修改数据为什么在视图层没有体现?

deleteClick:function(e){
    var shop=this.data.shoppingData
    wx.showModal({
      title: '提示',
      content: '是否选择删除所有选中的图片?',
      success(res){
        if(res.confirm){
          for(var i=0;i<shop.length;i++){
            if(shop[i].sel==true){ 
              shop.splice(i,1)
              i=i-1
              continue
            }
            for(var j=0;j<shop[i].commodity.length;j++){
              if(shop[i].commodity[j].sel==true){
                shop[i].commodity.splice(j,1)
                j=j-1
              }
            }
          }
        }
      }
    })
    this.setData({
      shoppingData:shop
    })
    console.log(this.data.shoppingData)
}


如代码所示,我想进行删除图片的操作。当我把其中的逻辑代码放在success函数中时,触发事件后视图层内的图片并没有被删除,返回的信息如图一,视图层如图三。把代码放在wx.showModal之外时不会出现这种问题,同样的操作下返回信息和视图层如图二图四。请大神指教!是API本身的问题吗?

回答关注问题邀请回答
收藏

6 个回答

  • 神经蛙
    神经蛙
    2020-04-03

    我理解是这样的:

    this.setData({
      shoppingData:shop
    })
    

    上面这个代码在你点击确定之前就已经执行了,但是你点击确定的时候这个就不会再执行了,就是是页面view不会刷新数据,你需要确定之后再执行上面的代码


    2020-04-03
    有用 3
    回复 4
    • 和风
      和风
      2020-04-03
      难道不是按照顺序来执行的吗??应该是先进行完success回调才会进行setData吧?而且可以从图一图二的输出看到,shoppingData是发生了改变的 已经执行了success里面的函数 不同点在于它这里显示内部还有两个数组,但又显示length为0
      而在第二种情况中,我不需要点击确定就可以执行函数,输出信息中数组消失,而且length也为0
      2020-04-03
      回复
    • 神经蛙
      神经蛙
      2020-04-03回复和风
      这个只是打印显示的问题,比如你先打印了,然后再修改就会出现类似的现象,这不是小程序的问题,修改对象之后再setdata下,上面的代码,点击确定之后不会再执行setdata了,你可以仔细看下
      2020-04-03
      回复
    • 和风
      和风
      2020-04-03回复神经蛙
      感谢 已解决问题 将setData放到了内部后解决了问题 这里一开始是因为this对象发生了改变所以把setData放在了外面  不过这里还有个小疑问 为什么setData没有等到success函数执行完再执行呢?是优先级的问题吗?
      2020-04-03
      回复
    • 神经蛙
      神经蛙
      2020-04-03回复和风
      我理解是这样的:点击确定回调只会执行success,我看了下文档应该是这个意思,不过你可以做下实验
      2020-04-03
      回复
  • 天刂℡
    天刂℡
    2020-09-21

    api是异步方法~~~你要是想这么做的话 就得写在success里面

    2020-09-21
    有用
    回复
  • 2020-05-26

    this.setData()和wx.showModal()是异步执行的, 两个差不多同时执行

    2020-05-26
    有用
    回复
  • 半度℡微凉
    半度℡微凉
    发表于移动端
    2020-04-20
    什么鬼
    2020-04-20
    有用
    回复
  • Wang
    Wang
    2020-04-03
    把this.setData({
      shoppingData:shop
    })改一下,放到success中
    


    2020-04-03
    有用
    回复 2
    • 和风
      和风
      2020-04-03
      success中的this对象会改变
      2020-04-03
      回复
    • 和风
      和风
      2020-04-03回复和风
      我解决问题了 在最开始用var self=this 然后在内部用self.setData就可以了 感谢
      2020-04-03
      1
      回复
  • 原点的原点
    原点的原点
    2020-04-03

    输出看了么?

    2020-04-03
    有用
    回复 3
    • 和风
      和风
      2020-04-03
      图一和图二就是数据的输出内容
      2020-04-03
      回复
    • 原点的原点
      原点的原点
      2020-04-03回复和风
      删除后setdata下
      2020-04-03
      回复
    • 和风
      和风
      2020-04-03回复原点的原点
      没明白是什么意思 代码中setData函数是放在最后执行的 请问可否讲的详细一点
      2020-04-03
      回复
登录 后发表内容
问题标签