AngularJS sharing data between controllers : $broadcast/$on or service
예를 들어 A, B, C 컨트롤러간에 데이터를 공유해야 하는 경우가 있다라고 가정 해보자.
즉, A 컨트롤러가 변경시키는 어떠한 데이터를 다른 컨트롤러들에서 추적해서 화면등에 갱신이 필요한 경우라면 어떤 방법이 좋을까..
이러한 Controller들간의 데이터를 공유하는 방법에 대한 내용을 인터넷을 찾아보면
$broadcast
, $on
을 사용해서 구현한 경우를 자주 볼수 있다.
그런데 이곳저곳 살펴보고 내린 나름의 결론은 서비스를 사용하는것이 정석이란 것이다. 서비스의 본래 목적은 어플리케이션의 비지니스 로직을 담기 위한 장소이지만, singleton의 특징을 활용, 이 서비스에 데이터를 보관하고 컨트롤러에서 inject하면 각 컨트롤러에서 동일한 데이터를 참조하게 할수 있는것이다.
https://jsbin.com/xebife/3/edit?html,js,output
물론 $broadcast
, $on
를 사용하는 경우에는 그 이벤트 발생 시점이 명확하다는 장점이 있다.
결론
컨트롤러가 데이터 공유를 위해 $broadcast
, $on
가 반드시 필요한지 먼저 생각해볼 필요가 있다. 단순한 데이터 공유 차원이라면 서비스를 활용하면 된다.