I\'m familiar with the following methods to implement communication between controllers.
Are there others? Are there better approaches / best practices?
As Samuel said, using a service to sharing data is a recommended method. The idea is that the state of the data are maintained consistently, regardless of any controller. This two articles can give you an idea of "how to" and "why": Sharing Data Between Controllers, The state of angularjs controllers.