收藏
回答

急~Component的observer调用setData崩溃

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 Bug 工具 6.7.2 1.9.9

急急急

我在component构造器的properties里编写属性被改变时调用的observer函数,出现了以下严重的错误

VM43:1 [Exparser] [Error] [Component] Error Listener Error @ #(anonymous)

并导致控制台直接失去连接。

错误指向我的observer里的setData;代码如下:

if (nv!=ov){
          var imgs = nv, images = [], rs = [[], [], []], r_state = [[], [], []];
          for (var x in imgs) {
            var p1 = Math.floor(x / 4);
            rs[p1][x % 4] = imgs[x]; r_state[p1][x % 4] = 2;
            images.push(imgs[x].substring(imgs[x].indexOf('/images/')));
          }
          var len = imgs.length, p1 = Math.floor(len / 4);
          if (len < 9) rs[p1][len % 4] = "/images/addImage.png";
       this.setData({ images: images, rowState: r_state,Rows: rs, imageNum: len, UpHeight: (14 * (1 + Math.floor((nv) / 4))) + "%;"})


最后一次编辑于  2018-09-11
回答关注问题邀请回答
收藏

1 个回答

  • 卢霄霄
    卢霄霄
    2018-09-12

    报错截下图呢。。代码把整个 properties 贴出来呢?

    2018-09-12
    赞同
    回复 8
    • Stark
      Stark
      2018-09-12


      properties: {
         
            
        images: {
          type: Array,
          value:[],
          observer: function (nv, ov, cp) {
             // console.log('nv:'+nv.toString());
            // console.log('ov:' + ov.toString());
            // console.log('data:'+this.data.images.toString());
              if (nv!=ov){
                var imgs = nv, images = [], rs = [[], [], []], r_state = [[], [], []];
                for (var x in imgs) {
                  var p1 = Math.floor(x / 4);
                  rs[p1][x % 4] = imgs[x]; r_state[p1][x % 4] = 2;
                  images.push(imgs[x].substring(imgs[x].indexOf('/images/')));
                }
                var len = imgs.length, p1 = Math.floor(len / 4);
                if (len < 9) rs[p1][len % 4] = "/images/addImage.png";
              this.setData({ images: images, rowState: r_state,Rows: rs, imageNum: len, UpHeight: (14 * (1 + Math.floor((nv) / 4))) + "%;"})//30行就是setData这里
              }
          }
        }
      },


      2018-09-12
      回复
    • 卢霄霄
      卢霄霄
      2018-09-12回复Stark

      像这样把下面的内容打出来看看呢,另外。。看下你界面怎么用这些值的啊


      2018-09-12
      回复
    • Stark
      Stark
      2018-09-12回复卢霄霄

      我在observer里加上一条console.log()语句时,发现会无限循环打印,而我的代码里并没有循环语句。。

      2018-09-12
      回复
    • 卢霄霄
      卢霄霄
      2018-09-12回复Stark

      你写了循环了哦。。你看看,你observer监听的是 images。然后你又在方法里 setData给images赋值

      2018-09-12
      回复
    • 卢霄霄
      卢霄霄
      2018-09-12回复Stark

      不要黑人家官方。。。

      [] != []   // true

      2018-09-12
      回复
    查看更多(3)