Actually, services are a good solution for this use case, and injecting $scope isn't necessary.
When a service exposes an object property, implicit watches are set up on them, so state changes get propogated transparently.
Service:
var problemSvc = function($http) {
var problemData = {
problemId: 1,
problemField: '',
otherProblemField: ''
};
return {
problem: problemData, // exposing the data as object
loadProblem: function(problemId) {
// load logic here
problemData.problemField = 'load data here';
problemdata.otherProblemField = 'more data from server or whatever';
}
}
}
angular.service('problemSvc', ['$http', problemSvc]);
1-N consuming controllers:
angular.controller('ctrl', ['$scope', 'problemSvc', function($scope, problemSvc) {
$scope.problem = problemSvc.problem;
}]);
As fields change in your problem service, any controller where the service is injected will be updated automatically
<div>{{problem.problemField}}</div>