javascript - Vue.js 组件不会通过其数据更改其 HTML 输出
问题描述
首先,我有一个像这样的子组件:
Vue.component("banana", {
props: {bid: Number} // bid: means Banana's id
data () {
return {
OK: true
}
},
mounted () {
this.do_a_sync_thing() // do a sync function when it is mounted
},
methods: {
do_a_sync_thing () {
setTimeout(function() {
this.OK = true // [ERROR]: WHY the output do not change to {{ pid }}
// but still is "NO OK, Loading..."
})
}
},
template: `
<div>
<template v-if="OK">
{{ bid }}
</template>
<template v-else>
NO OK, Loading...
</template>
</div>`
})
然后我在 HTML 文件中发短信:
<banana id="app" :bid="8"></banana>
这在 JS 文件中:
var app = new Vue({
el: "#app",
data: {}
})
所以问题是:为什么模板输出在我改变它的数据后没有改变?
谢谢你。( •̀ ω •́ )✧</p>
解决方案
in setTimeout
,匿名函数 override this
,所以this
in 函数不再指向 Vue 组件。您可以使用箭头函数来避免覆盖:
do_a_sync_thing () {
setTimeout(() => {
this.OK = true
})
}
推荐阅读
- python - np.arange() 的舍入问题
- css - 我在页脚中并排使用图像和文本,但是在调整窗口大小时会产生问题
- c# - 对象传递引用与值
- assembly - LLC -O=3 可以不从 clang -O0 生成的未优化 llvm 字节码中省略帧指针吗?
- python - Keras Multi-class 多标签图像分类:处理独立和从属标签和非二进制输出的混合
- mysql - 如何在 mysql 中为排序目的准备带有动态索引列的语句?
- python - 导入循环只工作两次,给出 pygame.error 显示表面退出
- canvas - 将 p5 画布与 CSS 网格对齐
- html - aria role="alert" 是否在页面加载时宣布?
- angular - 使用 Angular 构建相同项目的两个变体