0

전역 컨트롤러 (html로 본문에 할당 됨)에서 firebase의 스냅 샷을 한 번 잡아내는 다음 코드가 있습니다.

ref.once('value', function(snapshot){ 
    var data = snapshot; 
}).then(function(data){ 
    $rootScope.content = data.val(); 
}); 

내 HTML 템플릿의 콘텐츠를 사용하여 렌더링하고 있습니다. 내가 찾은 모든 질문은 콜백 안에 "then"코드를 넣는 결과를 가져왔다.

필자가해야 할 말은 스냅 샷을 한 번 가져 와서 $rootScope.content에 저장하고 기능 (예 : 앱의 어느 위치) 외부에서 액세스 할 수있는 것입니다.

나는 모든 것이 firebase가 반환되기 전에 렌더링되기 때문에 확신 할 수 있습니다. 기다리지 말라고하는 가장 좋은 방법은 확실치 않습니다.

미리 감사드립니다.

+1

왜 "rootscope"대신 서비스를 사용하지 마십시오 –

+0

하나의 스냅 샷이 필요하기 때문에 한 번만 사용할 수 있습니다. –

+0

사용자가 새로 고침하지 않는 한 데이터를 한 번 가져오고 다시 Firebase에서 가져 오지 못하게하는 서비스가 있다고 생각하면 나를 보여주십시오. 나는 그것을 결코 달성 할 수 없었습니다. –

답변

0

시도 :

ref.once('value', function(snapshot){ 
    $rootScope.content = snapshot.val(); 
}); 

또는 : once() 문서에서

ref.once('value').then(function(snapshot){ 
    $rootScope.content = snapshot.val(); 
}); 

:

반환 값 반환 선택적으로 successCallback 대신 사용할 수있는 약속 와 su를 처리하기위한 failureCallback ccess 및 실패.

0

두 번째 줄은 var data = snapshot;일까요? 원하는 모든 것이 전체 데이터베이스를 가져 와서 $rootScope.content이라는 객체 또는 다른 객체에 할당하려는 경우 다음이 작동합니다. 나는 각도를 사용하지 않지만 $rootScope.content은 개체가되어야하며, 일명 var foo = {}snapshot.val()을 취할 수 있습니다. snapshot.val()은 JSON 형식의 데이터 이외의 항목으로 가득하므로 속성 이름 (키)을 호출하여 개별 노드를 추출해야합니다 (예 : snap.val().firstName을 입력하면 Bob이됩니다.

firebase.database().ref('/').once('value').then(function(snap) { 
    $rootScope.content = snap.val(); 
});