Показать сообщение отдельно
  #1 (permalink)  
Старый 17.07.2014, 00:06
Интересующийся
Отправить личное сообщение для dtzscln Посмотреть профиль Найти все сообщения от dtzscln
 
Регистрация: 16.07.2014
Сообщений: 15

Помогите с архитектурой простой логики
Новичек. Оф. документацию читал, стековерфлоу тоже.
Суть:
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 выбраного человека.

Может у меня в целом архитектура сильно хромает, тогда подскажите как было бы правильнее.
Ответить с цитированием