2014-07-15 2 views
2

각도를 사용하여 Firebase 튜토리얼을 살펴본 후 컨트롤러에서 child_added 요청을 시작했지만 지금은 리팩터링하고 해당 요청을 서비스로 옮깁니다.파이어베이스 및 각도의 콜백

그러나 익숙하지 않은 서비스에서 사용되는 구문이 있습니다. 컨트롤러에 우리가 같은 서비스를 사용하고 그 다음

app.service(‘messageService’, function() { 
    var messagesRef = new Firebase(FBURL); 
    return { 
     childAdded: function childAdded(callback) { 
      messagesRef.on(‘child_added’, function(data) { 
       callback.call(this, { 
        user: data.val().user, 
        text: data.val().text, 
        name: data.name() 
       }); 
      }); 
     } 
    } 
} 

: 다음은 중포 기지 DB에 child_added 요청을 만들고 내 서비스의 우선

messageService.childAdded(function(addedChild) { 
    $timeout(function() { 
     $scope.messages.push(addedChild); 
    }); 
}); 

가, 나는에로 혼란 스러워요 무엇 callback.call(this, ...을 하고있다? 두 번째로 컨트롤러에서 push() 메서드를 사용하여 해당 줄을 연결하는 방법은 무엇입니까?

나는 모든 설명을 크게 부탁드립니다. 감사!

답변

3

call()은 JavaScript 표준 라이브러리 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)의 기능입니다.

귀하의 코드 :

callback.call(this, { 
    user: data.val().user, 
    text: data.val().text, 
    name: data.name() 
}); 

는 말을 실질적으로 같은 일이다

callback({ 
    user: data.val().user, 
    text: data.val().text, 
    name: data.name() 
}); 

function (addedChild) {...}

가 콜백입니다.

따라서, addedChild는 코드에서 단지 것을 끝 :

{ 
    user: data.val().user, 
    text: data.val().text, 
    name: data.name() 
} 
data이 추가 된 아이의 DataSnapshot입니다

, data.val()이 핵심 인 그 가치와 data.name() 것.

call()과 다른 점은 콜백을 직접 호출하는 것입니다.이 호출을 사용하면 호출자를 지정할 수 있으며 호출자는 this 콜백 객체가됩니다. (많은 문장이 마지막 문장에서 계속 진행됩니다.)

+0

'this' 키워드는 데이터 스냅 샷을 참조합니까? – reknirt

+1

아니요, 'this'는 firebase 이벤트 콜백 인 주변 함수의 호출자를 나타냅니다. 어떤 firebase가 이벤트 콜백을 호출하는지 모르겠지만, 빠른 디버깅 후에는 정의되지 않은 것처럼 보입니다. 편집 : 정의되지 않음, 창 개체가 아닙니다. – jwzirilli

+0

굉장합니다. 매우 감사합니다. – reknirt