- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在博客后端的一个部分(不是 SPA)上使用 VueJS 2.5.3,该部分调用 API 来检查附加到帖子的特色图片。
如果它找到一个,它会使用一个子组件来显示图像。问题是 API 调用成功后子组件没有呈现,因此图像对象也没有传递给它。
As you can see in this GIF ,子组件未呈现 <!---->
, 我有一个 v-if
在它上面检查图像是否存在。但是,如果我在 Vue DevTools 中单击子组件,子组件会按预期呈现并显示图像。
我的问题是为什么子组件只有在 Vue Devtools 中点击后才会呈现?当您单击组件时,Vue Devtools 会触发某种事件吗?
这是子组件:
<template>
<div v-if="showImage" class="featured-image-container" :class="[ size ]">
<img :src="processedSrc" alt="Featured Image">
</div>
</template>
<script>
export default {
props: {
image: {
type: Object
},
size: {
type: String,
required: true
}
},
data () {
return {
showImage: false
}
},
computed: {
processedSrc: function () {
if (this.image && typeof this.image === 'object') {
this.showImage = true
return this.image.sizes[this.size].file
} else {
this.showImage = false
}
}
}
}
</script>
And here is a link to the code for the parent and child components:
最佳答案
问题出在您的 PostFeaturedImage.vue
成分。您依赖于计算值 processedSrc
设置数据属性 showImage
.
然而,showImage
最初是 false
你在 v-if
中使用它根元素上的指令。这意味着 Vue 不会渲染该元素或 <img>
。它里面的元素。
Vue 中的计算属性是延迟加载的,这意味着它们的函数在被引用之前不会被调用。自 processedSrc
计算属性仅在 <img>
上被引用元素(并且因为该元素没有被渲染)它的方法没有被调用,这意味着 showImage
属性永远不会设置为 true
.
但是,当您在 Vue DevTools 中检查组件时,它会列出所有计算属性,这意味着 processedSrc
的方法computed 被调用,showImage
在这种情况下设置属性。
解决您问题的最简单方法是使用 v-show
而不是 v-if
,因为 v-show
中的元素将被隐藏,但即使值为 false
仍会呈现.
但是,我几乎从不建议根据计算属性的函数内的逻辑来设置数据属性的值。它会产生意想不到的、难以调试的副作用,从而导致您当前遇到的问题。
我建议您制作 showImage
property 也是一个计算属性,基于当前在 processedSrc
中确定其值的逻辑计算方法。然后,您可以确定是否尝试计算 processedSrc
的值。根据 showImage
的值计算.
computed: {
showImage: function() {
return this.image && typeof this.image === 'object';
},
processedSrc: function () {
if (this.showImage) {
return this.image.sizes[this.size].file;
}
}
}
这样,就可以更容易地看到是什么在影响什么,并且您的代码也将更容易维护。
关于vue.js - VueJS 组件只有在我在 Vue Devtools 中点击它时才会呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47145971/
语境 对于我的许多 js 文件,我没有源映射。当使用 devtools 控制台时,它会污染有关的警告。我不想关闭所有警告,但那些对我来说并不是真的有用 问题 如何抑制 Chrome DevTools
我有这个 Chrome DevTools 颜色选择器问题,当我将停靠位置更改为 时,吸管不起作用。底部 .默认设置在右侧,颜色选择器吸管工作正常,但当我改变位置时就不行了。有什么设置吗?因为我无法从
如图所示,我想知道是否有键盘快捷键可以逐个或批量关闭这些选项卡 最佳答案 AltW 或 OptW (Mac) 关闭事件选项卡。见 Sources panel keyboard shortcuts .
我正在测试我的 HTML 的可访问性。在使用 TAB 键导航 HTML 时,焦点环有时会消失,因为具有焦点的元素被隐藏了。那时我不知道哪个 DOM 元素有焦点。 有没有一种方法可以在 Chrome D
我正在使用 ios-webkit-debug-proxy 和 remotedebug-ios-webkit 适配器从 Linux 上的 Chrome Devtools 调试运行 Safari 的 IO
尝试运行 Nativescript 调试 session ,每次我输入 chrome-devtools://devtools/bundled/inspector.html?experiments=tr
看起来渲染设置不像以前那样(即启用绘画闪烁、显示图层边框、显示 FPS 表、显示滚动性能问题)。 我怎样才能再次访问这些功能? 最佳答案 渲染设置已从 移动 Chrome 48 .您现在可以通过三点菜
我正在使用 devtools 调试一个大的 DOM: 我想为这个 div 添加“书签”,这样我就可以轻松地再次跳转到它。 如果此书签能够在页面重新加载后继续存在,那就太好了。 有办法吗? 最佳答案 我
我想弄清楚为什么我的应用程序性能很差。所以我在 DevTools 中做了一个性能记录,我可以看到帧通常需要大约 150 毫秒,这太长了。 但是我不明白为什么框架需要这么多时间。有一些 javascri
我正在使用 devtools 调试一个大的 DOM: 我想为这个 div 添加“书签”,这样我就可以轻松地再次跳转到它。 如果此书签能够在页面重新加载后继续存在,那就太好了。 有办法吗? 最佳答案 我
我希望在页面刷新时打开 DevTools 是很常见的。我可以使用 DevTools 从一开始就调试该页面吗? 最佳答案 您可以远程调试自己的 Chrome 实例,以获得每个页面的完整 DevTools
我经常使用控制台来输入和评估表达式。很多时候我是错误的并且捏造了一些表达式名称。这样做之后,chrome devtools 控制台将自动完成并提示我的一些错误输入。 有没有办法清除控制台历史建议? 最
如果我打开 google DevTools 我找不到时间轴面板 如此处所述: 根本没有标签。怎么了? 我在 Windows 7 和 Chrome 61.0.3163.91 最佳答案 时间轴面板现在称为
Google Chrome Devtools 中的事件监听器断点提供了多种选择,但对我来说,它们并不是很有用,因为它们总是让我陷入代码的一些不相关部分。 我想知道是否可以将其限制为仅一类?例如 onM
Chrome 开发工具过去常常为我按字母顺序在“范围” Pane 中显示属性。例如,请参阅此处有关“Google Chrome 中源选项卡中的范围”的屏幕截图:https://dev.to/shado
我尝试使用 Chrome DevTools 为 Android 应用程序执行 SQL 查询,但这是不可能的,因为输入按钮将光标移动到下一行而不是执行命令。前一段时间它起作用了。 我重新安装了 Chro
我有相对简单的 webpack 配置文件(如下): module.exports = { entry: "./src/main.js", output: { filen
我有这个简单的代码 input:hover{border: 3px solid blue;} 预期行为:当我将鼠标悬停在输入上时,新样式应该出现在 devtools 样式部分,但它仅在我通过 dev
documentation说“每次打开 DevTools 窗口时都会创建扩展的 DevTools 页面实例。DevTools 页面在 DevTools 窗口的生命周期内存在。” 然而,Facebook
我有一个页面,其中我使用 morris.js 插件显示 23 个 donut chart 。在性能分析期间,我遇到了这个: 当然还有 22 个以上的警告。结果时间为 401 毫秒。 我对每个 donu
我是一名优秀的程序员,十分优秀!