2016-06-15 4 views
0

서비스의 여러 컨트롤러에서 데이터를 업데이트하려고합니다. 한 옵션은 데이터를 $rootScope에 브로드 캐스트/방출하는 것입니다.서비스에서 여러 컨트롤러의 데이터를 업데이트하십시오.

나는 수 많은 청취자가 있어야 할 것이다. 어떤 청취자는 같은 이벤트를 듣고, 어떤 사람들은 다른 청취자를 필요로 할 것이다. 그리고 이벤트는 몇 초마다 파견됩니다.

콜백을 사용하고 등록을 취소 할 수있는 실제 솔루션을 만들었습니다. 이상한 점은 비슷한 솔루션을 사용하는 다른 사람이 보이지 않는다는 것입니다. 이렇게하면 이런 식으로하지 않는 이유가 있는지 궁금하게 생각할 수 있습니다.

서비스

var callbacks = {}; 
var idCounter = 0; 
function register(cb) { 
    var id = idCounter++; 
    callbacks[id] = cb; 

    return function() { 
    delete callbacks[id]; 
    }; 
} 

function send(data) { 
    for (var i in callbacks) { 
    callbacks[i](data); 
    } 
} 

컨트롤러

var d = service.register(function(data) { 
    console.log(data); 
}); 

$scope.$destroy(function() { 
    d(); 
}); 

그래서 내 질문은 생각 : 나는 이런 종류를 사용하지 말아야하는 이유

  • 어떤 이유가 있습니까 콜백 메커니즘. (메모리 누수가 있습니까?)
  • 그냥 이벤트로 대신 가야합니까? 이 규모에서는 성능이 적절하지 않습니까?
  • 개선 되었습니까?

답변

0

이벤트 및 디스패처의 개념을 재현합니다. 사용하십시오! var d = ... (컨트롤러에서) 포인터의 함수 범위가 삭제되지 않으면 예 메모리 누수가 발생합니다. 또한 서비스에서 var callbacks은 못생긴 슬라이드 효과입니다, 이런 이유로 이벤트를 깨끗하게 캡슐화하고 일반 서비스입니다!

관련 문제