javascript - 在 Vue.js 中,为什么我的计算属性不起作用

标签 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 之前钩子(Hook)。

如果您尝试在 beforeCreated 中记录计算属性的值钩子(Hook)(第一个生命周期钩子(Hook))而不是 mounted在您的示例中,您会看到它是 undefined .

参见 component life-cycle :

enter image description here

(*) 为简洁起见裁剪了图表

计算属性在上图中的“Init injections & reactivity”步骤中进行评估。

计算属性值不能用作 data 属性的初始值, 通常它们取决于 data属性值和其他外部和 react 值(例如 Vuex getter、Vue 路由器参数等)。

关于javascript - 在 Vue.js 中,为什么我的计算属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55877051/

相关文章:

javascript - 如何防止指针在 HTML 中通过?

javascript - 扩展 Javascript 对象功能集

javascript - 来自 MySQL 的 JSON 提要有效,但不能超过 x 条记录

javascript - Vue.js 中从子组件更新父组件

javascript - 如何使用 React 启用/禁用自定义验证按钮

javascript - 如何将 Bootstrap 按钮分组为两列?

javascript - 如何在我的vue js中实现无限滚动

javascript - Vue2 传递任意命名变量作为 prop

javascript - 从 vue-i18n 设置的 vuejs 默认属性

javascript - Vue3 监听动态创建的子组件的事件,$on replacement