javascript - 在 Vue.js 中,为什么我的计算属性不起作用
问题描述
在以下代码中:
new Vue({
el: '#app',
computed: {
myMessage: function() {
return "hello";
}
},
data: {
message: this.myMessage
},
mounted: function() {
console.log(this.myMessage);
}
})
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>{{ message }}</p>
</div>
https://jsfiddle.net/hk49eL38/
如果我更换:
this.myMessage
使用字符串(例如“Hello world”),它会正确呈现。
但是当我使用时this.myMessage
,不会呈现任何文本。
为什么是这样?
解决方案
问题是您试图使用计算属性作为message
数据属性的初始值。
当data
函数被 Vue 内部调用时,计算的属性还没有被评估,这是很早就完成的,在created
钩子之前。
如果您尝试在beforeCreated
钩子(第一个生命周期钩子)中记录计算属性的值,而不是mounted
像您的示例中那样,您将看到它是undefined
.
查看组件生命周期:
(*) 为简洁起见裁剪了图表
在上图中的“初始注入和反应性”步骤中评估计算的属性。
计算的属性值不能用作 的属性的初始值data
,通常它们取决于data
属性值和其他外部和反应值(例如 Vuex getter、Vue 路由器参数等)。
推荐阅读
- c++ - c++中string&和string的区别
- elasticsearch - 如何在elasticsearch中获取不同字段/数组值的总和?
- python - PermissionError: [WinError 5] Access is denied 错误发生在 os.remove 中的 pyinstaller exe
- html - 将一个元素右对齐并在其他两个元素下对齐
- python - 使用带有 win32com 的 Python 按名称定位特定的 Excel 工作簿
- python - 从 pandas 列转换或至少删除非英语/不需要(非 ascii)值或将其转换为英文字符
- angular - Docker构建错误:执行程序运行失败[/bin/sh -c npm run build]:退出代码:1
- qt - 如何在 QML 中动态更新 ListView
- python - 循环遍历 Python 中的子字典时出现意外输出
- css - primeng p-dialog 样式覆盖