每当我更新当前用户时,所有集合都会被刷新(实际上不是)

时间:2016-07-28 23:33:18

标签: javascript mongodb meteor angular-meteor ddp

我正在开发一个角度流星的网站,我遇到了一个奇怪的问题。在每个页面上我都有一个聊天块,消息存储在集合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中删除。如果我刷新页面,它会聊天消息,其他所有内容都会再次出现。

任何帮助都将不胜感激。

1 个答案:

答案 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()来等待用户数据。

相关问题