2013-10-23 5 views
1

연습으로 나는 http://angularfire.com/tutorial/에서 볼 수있는 기본 angularFire 채팅 앱에 이메일 인증을 추가하고있었습니다. 내가 위조를 통해 첫 번째 항목을 삭제하는 과정에서, 0 항목이 있던 DOM에 정의되지 않은 항목이 나타났습니다.AngularFire 채팅 예제가 왜 잘못 되었습니까?

두 번째 (id 1) 항목을 삭제할 때 다음 오류 메시지로 인해 아무 것도 나타나지 않았습니다. 중계기에서 중복이 허용되지 않습니다. Repeater : 메시지의 메시지 키 : 정의되지 않음 : 정의되지 않음

내 코드가 파생 된 튜토리얼에서 첫 번째 정의되지 않은 것으로 나타났습니다. 두 번째가 아닙니다. .firebaseio-demo.com URL을 대체 할 때까지 하나는 내 firebase 있습니다. 이것은 내가 코드를 구현하지 않는다고 믿게한다.

실종 된 .firebaseio-demo.com의 연기 및 거울 뒤에 무엇이 있습니까? 미스터리 유효성 검사 규칙이 있습니까?

어떤 시점에서 angularjs.org의 백엔드 와이어 링 예제와 동일한 문제가있었습니다. 최근에는 수정 된 것으로 보입니다.

답변

0

나에게 버그와 같은 느낌이 들었습니다. 위조 된 배열에서 삭제 된 항목이 클라이언트의 angularFire 바운드 모델 배열에 나타나서는 안됩니다. 이 효과는 배열 대신 객체 컬렉션을 사용할 때도 발생하지 않습니다. angularFireCollection을 사용하거나 원래 messages 유형을 객체로 설정하는 경우 : $scope.messages = [] 대신 $scope.messages = {}을 입력하십시오.

그러나, 그 삭제 된 항목들은 이후 는 동일한 값을 갖는 AngularJS와 중계기 are not allowed에 배열 결과에 하나 이상의 undefined을 갖는 undefined 같은 결과 배열에 표시된다. 따라서 여러 메시지를 삭제 한 후에 나타나는 오류는 실제로 예상됩니다.

지금까지는 위에서 언급 한 것처럼 배열 대신 객체 컬렉션을 사용하거나 반복기의 undefined 멤버를 제거하기 위해 Angular filter을 설정하는 것이 가장 좋은 방법 인 것처럼 보입니다.

+0

'$ scope.messages = {}'를 설정해도 문제가 지속됩니다. chat tut에서 두 개의 항목을 추가 한 다음 데모 firebase를 가져 와서 처음 두 항목을 삭제하여 https://chatterr.firebaseio.com/을 만들었습니다. 이 문제를 재현 할 수 있는지 확인하십시오. – Bro

+0

사용자가 만든 firebase과 데모가 firebase를 만든 이유가 다른 이유는 완전히 당황 스럽습니다. – Bro

+0

이미 배열 인 기존 FB 위치에서'$ scope.messages'를 {{}'(으)로 전환 할 수 없으므로 ref 위치를 그런 식으로 초기화해야합니다. 그러나 객체가'push' 메소드를 가지지 않기 때문에 새로운 메시지가 추가되는 방식을 변경해야합니다. – hiattp

관련 문제