[英]In Vue.js, why isn't my computed property working
在以下代码中:
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
数据属性的初始值。
当 Vue 内部调用data
函数时,计算的属性还没有被评估,这是很早就完成的,在created
钩子之前。
如果您尝试在beforeCreated
钩子(第一个生命周期钩子)中记录计算属性的值,而不是像您的示例中那样mounted
,您将看到它是undefined
。
查看组件生命周期:
(*) 为简洁起见裁剪了图表
在上图中的“初始注入和反应性”步骤中评估计算的属性。
计算的属性值不能用作data
属性的初始值,通常它们取决于data
属性值和其他外部和反应值(例如 Vuex getter、Vue 路由器参数等)。
在编写myMessage
之前你不应该使用this
,因为 VueJS 不是这样工作的。 它已经考虑了this
方面的一切。 你应该这样做:
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>{{ myMessage }}</p>
</div>
尝试在安装组件时将myMesssage的值设置为message 。
mounted: function() {
this.message = this.myMessage
}
尝试更改计算出的我的消息中的数据消息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.