2016-07-28 3 views
1

저는 각도 유성이있는 웹 사이트를 개발 중이며 이상한 문제에 봉착했습니다. 내가 채팅 블록을 가지고있는 모든 페이지에는 메시지가 콜렉션 chatMessages에 저장되어 올바르게 표시됩니다. 문제는 현재 사용자 (수동 몽고 문서 에디션 또는 운석의 메서드 내에서 업데이트)를 편집 할 때마다 내 앱이 모든 구독을 삭제한다는 것입니다. 결과적으로 채팅에서 메시지가 사라집니다. 하지만 채팅 메시지가 사라지는 것은 아닙니다. 어떤 문제의 원인인지 이해하기 위해 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" 
} 

, 데이터는 몽고에서 제거되지 않습니다. 페이지를 새로 고침하면 메시지가 채팅되고 다른 모든 메시지가 다시 표시됩니다.

도움을 주시면 감사하겠습니다.

+0

코드를 더 쉽게 볼 수 있습니다. – vijayst

답변

0

마지막으로 문제의 원인을 발견했습니다. 내 main.html에서 나는 다음과 같은 것을 가지고있다 :

<div ng-if="$root.loggingIn" class="loading-screen"></div> 
<myapp ng-if="!$root.loggingIn"></myapp> 

이것은 현재 사용자의 데이터가 이용 가능하기 전에 구성 요소의 코드 실행을 막기 위해 만들어진 것이다. myapp 지시문에서 ng-if="!$root.loggingIn"을 삭제하고 문제가 사라졌습니다. 왜 그런 이상한 행동을했는지를 짐작할 수 있습니다. 이제 구성 요소에서 this.autorun()을 사용하여 사용자 데이터를 기다립니다.