AngularJS не обновляет переменную шаблона при изменении области действия

Это будет один из тех глупых вопросов, которые очень очевидны для экспертов.

У меня есть веб-приложение, которое передает данные службе, где я пытаюсь сохранить данные и перенаправлять их на шаблон через мой контроллер.

Данные поступают и обновляют переменную, но только обновлениями пользовательского интерфейса я выполняю действие над этими данными:

services.factory('Summary', ['$q','$rootScope','$http', '$location', function ($q, $rootScope,$http, $location) {

var Service = {};
Service.dataObj = {};
Service.dataObj.d = {"gello":"goodbye"};
....
function listener(data) {
   messageObj = data;
    Service.dataObj.d = data;
  console.log("Received data from websocket: ", messageObj);

}
})]);


controllers.controller('UserCtrl', ['$scope', 'Summary',
function ($scope, Summary) {

    $scope.click = function(){
        alert(JSON.stringify($scope.summaryinfo));
    }
    $scope.summaryinfo = [Summary.dataObj];
    $scope.summarygridOptions = {
        data: 'summaryinfo'
    };
    console.log("hello");
}]);

Данные накапливаются и, насколько мне известно, хранятся в Service.dataObj.d, если я укажу свой HTML-шаблон на Service.dataObj, этот объект обновляется и не заменяется, поэтому указатель должен оставаться, а объект будет наблюдаться.

Но это не изменится, если я не запустил метод click(), и в этом случае пользовательский интерфейс затронут, хотя Im просто вызывает предупреждение.

Что мне не хватает?

Ответы

Ответ 1

Вероятно, вам нужно использовать $apply():

$apply() используется для выполнения выражения в angular извне структуры angular. (Например, из событий браузера DOM, setTimeout, XHR или сторонних библиотек).

function listener(data) {
   $scope.$apply(function() {
       Service.dataObj.d = data;
   });
}