我正在开发一个角度流星的网站,我遇到了一个奇怪的问题。在每个页面上我都有一个聊天块,消息存储在集合chatMessages中并正确显示。问题是,每当我编辑当前用户(手动mongo文档版本或在流星的方法内更新)时,我的应用程序将删除所有订阅。结果,消息从聊天中消失。但不仅聊天消息消失了。我使用this piece of code来了解问题的原因是什么,但我几乎无法理解。这是浏览器控制台输出中最有趣的部分:
// On page load
send Object {
msg: "sub",
id: "EPgQwMiDggM7wafCN",
name: "chatMessages",
params: Array[0]
}
receive Object {
msg: "added",
collection: "chatMessages",
id: "G6tv76ZSJYXmnsrAY",
fields: Object
}
// Calling 'createArenaRoom' method
send Object {
msg: "method",
method: "createArenaRoom",
params: Array[1],
id: "8",
randomSeed: "516b5128615f1c7849f2"
}
// User updated
receive Object {
msg: "changed",
collection: "users",
id: "sQnaLPj2FvH692rQM",
fields: Object
}
// ??? WHY ????
send Object {
msg: "unsub",
id: "EPgQwMiDggM7wafCN"
}
receive Object {
msg: "removed",
collection: "chatMessages",
id: "G6tv76ZSJYXmnsrAY"
}
receive Object {
msg: "nosub",
id: "EPgQwMiDggM7wafCN"
}
顺便说一下,数据不会从mongo中删除。如果我刷新页面,它会聊天消息,其他所有内容都会再次出现。
任何帮助都将不胜感激。
答案 0 :(得分:0)
最后我发现了问题的原因。在我的main.html中我有这样的东西:
<div ng-if="$root.loggingIn" class="loading-screen"></div>
<myapp ng-if="!$root.loggingIn"></myapp>
这是为了在当前用户的数据可用之前阻止组件的代码执行。我从ng-if="!$root.loggingIn"
指令中删除了myapp
,问题就消失了。我只能猜到它为什么会引起这种奇怪的行为。现在我在组件中使用this.autorun()
来等待用户数据。