【发布时间】:2016-08-02 00:57:52
【问题描述】:
这出现在我的浏览器控制台中:
[Vue 警告]:评估表达式“permissions.edit”时出错:TypeError:无法读取未定义的属性“编辑”(在组件中找到:
)
相关代码:
{{ permissions | json }}
<a class="button" v-on:click="toggleEditMode" v-if="permissions.edit">{{ editMode ? 'Save' : 'Edit' }}</a>
结果:
权限显然不是未定义的。这是怎么回事?更令人困惑的是,如果我将文字对象传递给组件 (:permissions="{edit: true}"),警告就会消失,但 {{ permissions | json }} 的 json 输出看起来完全一样。
【问题讨论】:
-
问题似乎是您以某种方式添加了
edit属性,而 Vue 没有注意到它。 (json 过滤器不关心反应性,所以在那里没关系)你何时以及如何创建/填充权限对象?您是否在某处更改它,在ready()钩子或其他地方?您是否在data组件中定义了permissions对象,并且edit属性已经到位?这些是我们需要的相关信息。 -
这是来自 vue-resource 的服务器响应,在我的 ViewModel 的
created()方法中创建。它使用this.$set分配给 ViewModel,并在我的模板中作为道具传递。 -
好了。使用 vue-resource 的 APi 调用是异步的,这意味着 Vue 不会等待它完成,而是继续编译模板,这比 API 调用快得多。所以当 Vue 评估
permissions.edit时,它还没有被设置,因为 API 调用仍在后台进行。一旦调用完成,permissions就会正确设置,并且您的模板会按预期工作。
标签: javascript vue.js