vue.js - Vue.js - 无法访问道具对象的属性
问题描述
我正在创建然后使用 pdfjs 将对象传递给子 Vue 组件。当我这样做时,我可以访问对象本身,但我不能访问对象的任何属性。
在所有生命周期钩子中都是这种情况。
<i-slide-deck-pdf // calling child vue component
v-if="true"
:slideDeckItem="fetchPDF('/static/intropdf.pdf')"
:current-user-progress="currentUserProgress"
@i-progress="putProgressTracker"
@i-slide-change="onSlideChange"
/>
...
fetchPDF(url) { // function being used to create the object
let pdfItem = new Object();
import(
'pdfjs-dist/webpack'
).
then(pdfjs => pdfjs.getDocument(url)).
then(pdf => {
pdfItem.pdf = pdf;
pdfItem.pages = range(1, pdf.numPages).map(number => pdf.getPage(number));
pdfItem.pageCount = pdfItem.pages.length;
})
return pdfItem;
},
...
props: { // prop call in child component
slideDeckItem: {
type: Object,
required: true
},
}
控制台日志
提前致谢。
解决方案
这是因为异步调用尚未完成,因此您只是返回一个空对象,要解决此问题,您需要在then
代码部分中设置一个值,并将其绑定到您的道具,因此:
fetchPDF(url) { // function being used to create the object
let pdfItem = new Object();
import(
'pdfjs-dist/webpack'
).
then(pdfjs => pdfjs.getDocument(url)).
then(pdf => {
pdfItem.pdf = pdf;
pdfItem.pages = range(1, pdf.numPages).map(number => pdf.getPage(number));
pdfItem.pageCount = pdfItem.pages.length;
// This should be inside the "then"
this.slideDeckItem = pdfItem;
})
},
然后,您需要slideDeckItem
在父数据属性中声明,并将其绑定到组件的道具:
<i-slide-deck-pdf
v-if="true"
:slideDeckItem="slideDeckItem"
:current-user-progress="currentUserProgress"
@i-progress="putProgressTracker"
@i-slide-change="onSlideChange"
/>
我做了一个 JSFiddle,给你基本的想法,虽然我用超时来模拟异步调用:http: //jsfiddle.net/ga1o4k5c/
你可能还想看看Promises 是如何工作的
推荐阅读
- centos7 - ScyllaDB-4.0.3 在 centos 7-aarch64 上编译
- java - Spring security:使用自定义登录页面:spring 如何处理提供的登录数据?
- flutter - 在颤动中是否有任何具有可调整大小的列和行大小的小部件表(如在 excel 中)?如果是,我该怎么做?
- c++ - 有没有办法将 long double 转换为 double 并在 c++ 中相应地缩放范围?
- c# - 防止在 ListView 上添加重复项
- ruby - 我可以在自身的上下文中创建一个过程吗?
- python - 使用 Beautiful Soup Onclick 标签进行网页抓取
- java - 需要逻辑上的帮助以进行实际操作
- ios - 在 Unity 中使用 ProjectCapabilityManager 向 Xcode 输出添加权利时,CODE_SIGN_ENTITLEMENTS 不正确
- c++ - 计算大型矩阵的行列式 - 应该使用哪些值?