2***@qq.com
2***@qq.com
  • 发布:2023-09-04 12:04
  • 更新:2023-10-03 18:12
  • 阅读:1913

查找实例中的元素引起错误Error: Not Found:Page[2][-1,10] at view.umd.min.js:1

分类:uni-app

这是github源码中的查找元素方法

export function findElm (component, pageVm) {  
  if (!pageVm) {  
    return console.error('page is not ready')  
  }  
  if (!component) {  
    return pageVm.$el  
  }  
  if (__PLATFORM__ === 'app-plus') {  
    if (typeof component === 'string') {  
      const componentVm = findVmById(component, pageVm)  
      if (!componentVm) {  
        throw new Error(`Not Found:Page[${pageVm.$page.id}][${component}]`)  
      }  
      return componentVm.$el  
    }  
  }  
  return component.$el  
}

在我们写的组件或者页面的报错
Error: Not Found:Page[2][-1,10] at view.umd.min.js:1

分析:

  1. [2]的2是getCurrentPages()页面数组的第2个
  2. [-1,10]是页面的$id,可通过getCurrentPages()[1].$vm.$id 查询,通常为-1
  3. typeof _$id 为数字是不会报错的,报错时component为“-1,10”

来源:
当我们执行一些查询元素宽高方法时,找不到元素。
可能是元素加载顺序的问题,比如在父组件的mounted周期执行了查询子组件高度的方法,但子组件中的mounted生命周期并没有完全执行完,导致子组件实际上还未渲染完。

0 关注 分享

要回复文章请先登录注册

2***@qq.com

2***@qq.com

是这个原因,我的情况是:
```
mounted() {
this.$uGetRect('.u-swipe').then(res => {
app.movableAreaWidth = res.width;
})
}
```
在mounted的时候,由于u-swipe组件还没渲染完,此时调用uGetRect就会抛出上面的异常。是获取不到高度的。解决办法就是,先正常获取,如果出现渲染延迟情况,用timeout兜底。(这样能保证正常的情况没有延迟,异常情况100ms延迟兜底)
```
mounted() {
var app = this
// 如果100ms之后'.u-swipe'还没有初始化完毕,$uGetRect()获取不到,这里重新获取宽度
setTimeout(function () {
if (app.movableAreaWidth == 0) {
this.$uGetRect('.u-swipe').then(res => {
app.movableAreaWidth = res.width;
})
}
}, 100)
this.$uGetRect('.u-swipe').then(res => {
app.movableAreaWidth = res.width;
})
},
```
2023-10-03 18:12