2014-06-24 4 views
1

브라우저 사이드 데이터베이스에 데이터를로드하는 팩토리가 있습니다. 컨트롤러에서 데이터를 성공적으로로드하는 dataFactory.LoadData()를 호출합니다. 그래도 진행률 표시 줄을 추가해야합니다. 진행률 표시 줄의 값을 변경할 수있는 지시문이 있지만 현장을 나중에 업데이트 할 수 있도록 범위를 업데이트 할 수있는 공장이 필요합니다.이 필드는 수행 할 수 없거나 공장에서 업데이트 한 지시문이 필요합니다. 지금까지 본 것에서, 공장은 일반적으로 지시문에 전달되고 다른 방향으로는 전달되지 않습니다. 컨트롤러 뷰를 업데이트하기 위해 공장의로드 작업을 어떻게 얻을 수 있습니까? 프로세스가 다음과 같아야합니다. 1) 공장에서 클라이언트 측 데이터베이스를로드합니다. 2) 공장 모듈이 데이터베이스로로드되는 동안 뷰에서 진행률 막대가 변경됩니다.Clientside 데이터베이스가있는 공장 및 지시문

+0

[약속/연기 대상] (https://docs.angularjs.org/api/ng/service/$q) 알림 메서드를 구현하십시오 –

답변

1

이것은 $ scope에서 angular 이벤트 프레임 워크를 통해 확인할 수 있습니다.

$emit()$on()

귀하의 공장은 $ 범위에 대한 참조를해야합니다. 적절한 시간에 공장은 $ emit을 사용하여 지시문이 듣고있는 범위까지 이벤트를 보냅니다. 그런 다음 지시문이 진행률 막대를 업데이트합니다. $ emit의 args 매개 변수를 사용하여 이벤트와 함께 정보를 보낼 수 있습니다.

공장 :

factoryMethod() { 
    $scope.$emit('my.special.event', args); 
} 

지침 :

$scope.$on('my.special.event', function(event, args) { 
    //use the event and args to update the progess bar 
} 
사용할 수
+0

공장에서 $ scope 만 $ 범위를 받아 들일 수 없다는 것을 읽었습니다. 불행히도 $ rootscope를 성공적으로 통과 할 수 없습니다. 모범이 있습니까? – Keith

+0

왜 내가 인수로 범위를 전달할 수 없었는지 모르겠다. 그러나 그것은 위대한 관행이 아닐 수도 있습니다. 약속을 들여다 볼 수도있는 것 같습니다. 여기에 더 많은 정보가 있습니다 : http://stackoverflow.com/questions/22159189/angular-js-in-factory-can-i-access-scope –

+0

약속은 다음 자식 약속을 향해 스택 아래로 .then() 약속 결과를 따르습니까? ? 나는 테이블로드 당 체인 된 약속을 가지고 있지만 어떻게 작동합니까? 각 .then(). then()은 컨트롤러가 끝날 때까지 약속을 컨트롤러 또는 다음 then() 문으로 돌려 주겠습니까? 나는 다음 then() 문으로 넘어갈 것이라고 생각한다. 이렇게하면 진행 표시 줄을 업데이트 할 수 없습니다. – Keith