Новичек. Оф. документацию читал, стековерфлоу тоже.
Суть:
1) есть два соседа-контроллера:
<div ng-controller="firstController">
<ul>
<li ng-repeat="message in messages">{{ message.text }}</li>
</ul>
</div>
<div ng-controller="secondController">
<div ng-repeat="man in mans" ng-click="loadMessages(man.id)" class="chuvak">{{ man.name }}</div>
</div>
2) Есть сервис, который достает с сервера коллекцию messages конкретного человека по его по id. И кеширует их в простейшем обьекте в виде связки id: messages:
app.factory("History", function($resource, $q) {
var cache = {};
var r = $resource("index.php");
var current;
return {
get: function() {
if (!cache[current]) {
var items = r.query({id: current});
return items.$promise;
} else {
var fromCache = cache[current];
var defer = $q.defer();
defer.resolve(fromCache);
return defer.promise;
}
},
save: function(id, content) {
if (content) {
cache[id] = content;
}
},
setClient: function(id) {
current = id;
}
};
});
3) Этим сервисом пользуются оба контроллера:
Первый контроллер - вывод списка сообщений для конкретного человека:
function firstController($scope, History) {
var manId = 1;
History.setClient(manId);
History.get()
.then(function(data) {
$scope.messages = data;
}, function(error) {
})
.finally(function() {
History.save(manId, $scope.messages);
});
}
Второй контроллер - вывод списка людей. По клику на конкретного человека нужно в первом контроллере отобразить его messages:
function secondController($scope, History) {
$scope.mans = [
{id: 1, name: "vasua"},
{id: 2, name: "petya"}
];
$scope.loadMessages = function(id) {
History.setClient(id);
}
}
Проблема: когда я жму по конкретному пользователю в secondController и отрабатывает loadMessages(), которая обновляет в сервисе History id текущего клиента...вот в этом месте нужно, что бы в первом контроллере заново вызвалась History.get(), которая подтянет messages выбраного человека.
Может у меня в целом архитектура сильно хромает, тогда подскажите как было бы правильнее.