this.currentBook

来源:5-13 全文搜索功能实现(搜索算法+数组降维)

肖慕粉

2019-04-16

老师,按您说的,再EbookReader可以正常获取this.currentBook
麻烦老师帮我看下代码可以吗,感激。在EbookSlideContents无法获取。
https://gitee.com/kaiwenxiao/vue-ebook

写回答

2回答

Sam

2019-04-16

你目前的源码:

mounted() {
  console.log(this.currentBook) // null
  console.log('asd') // asd
},

这样打印是获取不到currentBook的,因为下载电子书后才会设置currentBook,这个过程在Vue渲染DOM之后,所以在mounted的时候currentBook并没有被赋值,因而打印结果为null,要监听currentBook的状态可以使用watch进行监听,代码如下:

watch: {
  currentBook(book) {
    console.log('new currentBook', book);
  }
}

这样就可以监听currentBook的变化了:)

0
3
qq_慕雪1029227
那这里做doSearch需要用到currentBook.ready怎么办?currentBook是null啊,视频里这样写为什么没出错呢,我这里就一直报错
2020-08-07
共3条回复

Sam

2019-04-16

好的,代码调试过了,没什么大问题,把EbookSlideContents.vue源码中27-30行做一下调整就行了,代码如下:

<div class="slide-contents-book-info-wrapper">
  <div class="slide-contents-book-title">{{metadata && metadata.title}}</div>
  <div class="slide-contents-book-author">{{metadata && metadata.creator}}</div>
</div>

增加metadata的判断即可消除报错,出错原因是metadata是异步写入的,下载电子书解析后才会获得metadata,所以这个过程在Vue渲染DOM之后,如果不加metadata的判断会导致浏览器抛出异常

0
3
Sam
回复
肖慕粉
见上面的回复?
2019-04-16
共3条回复

Vue 实战商业级读书Web APP完整项目

Vue全家桶+最新前端技术+前后端分离架构,完整项目流程

1610 学习 · 1951 问题

查看课程