2014-12-12 3 views
1

Я просмотрел многочисленные сообщения, но не нашел того, что вполне соответствует тому, что я ищу. Я разделился на несколько контроллеров, чтобы четко разделить функциональность на несколько областей. Существует централизованная служба, которая содержит все данные, которые передаются между отдельными контроллерами и отображаются на экране в разных областях. Я столкнулся с проблемой с контроллером, который находится дальше по линии, которая захватывает те же данные, что и другие, но пользовательский интерфейс не обновляется, когда обрабатываются данные в службе. В каждом контроллере я установить переменную возможности для объекта в службу ..

$scope.package = SampleService.getPackage(); 

я затем использовать нг-повтор в цикле через пакет, который содержит массив, и может содержать вложенный массив данных для отображения. Во время процесса данные обрабатываются и назначаются этим элементам (внутри службы, а не контроллера). Если я поставлю переменную $ scope.package в цикле, я вижу, что переменная обновляется из службы (смотря ее в консоли), но изменения не отражаются на экране. В частности, я устанавливаю несколько значений true/false и в зависимости от их значения на экране будут отображаться несколько значков. Значки никогда не отображаются (не обнаружил, что переменная области не изменилась), пока я не щелкнул что-то на экране (при условии, что это вызывает цикл дайджеста). Затем появятся значки. Однако они меняются несколько раз в зависимости от состояния задачи. Я должен продолжить щелчок, чтобы изменить значки.

Есть ли что-то, что мне не хватает? Изменения в структуре отлично работают в другой области страницы. Это одна из областей, с которой я не могу работать правильно. Единственное отличие состоит в том, что я переключаю true/false вместо того, чтобы манипулировать другими областями объекта. Может ли с помощью угловой.copy установить значения true/false?

Я вроде в недоумении, что делать здесь ..

Предложения?

ответ

0

Я уверен, что будут лучшие ответы, но одна вещь, которую нужно попробовать, - это обернуть выполнение вашего сервиса в $ timeout, который заставит дайджест.

$timeout(function() { 
    $scope.package = SampleService.getPackage(); 
}); 
+0

То же самое, что и выше ... не кажется как хороший ответ, но и не работает. – dferg

+0

@ dferg, если ни одна из двух не работает, это не проблема дайджеста. '$ timeout', безусловно, заставляет дайджест, который должен обновить ваше представление. Без примеров кода трудно понять, что происходит. – Marko

+0

Понял и согласился, поэтому его так смущает. Удивление, если его просто не замечает, что переменная загрязнена из-за того, насколько далеко изменилось изменение. Его несколько объектов вложены в несколько уровней внутри других объектов и массивов. – dferg

-1

Похоже, ответ, чтобы вызвать $digest цикл: http://www.sitepoint.com/understanding-angulars-apply-digest/

Это приведет к следующему коду в контроллере:

$scope.$apply(function() { 
    $scope.package = SampleService.getPackage(); 
}); 
+0

Я думал, что это может быть решение, но похоже, что там должно быть что-то, что мне не хватает, и это не сделает его соответствующим образом обновленным. Постоянное срабатывание приложения кажется расточительным и похоже на взломанное решение. Это может быть мой единственный, хотя .. Я попробую это – dferg

+0

Это на самом деле не работает. – dferg

+0

интересно. Вы пробовали решение «$ timeout» ниже? Возможно ли тогда, что, возможно, проблемы не так, как вы думаете? – jdotjdot