AngularJS не обновляет переменную шаблона при изменении области
Это будет один из тех глупых вопросов, которые очень очевидны для специалистов.
У меня есть websocket, толкающий данные в службу, где я пытаюсь сохранить данные и отправить их в шаблон через мой контроллер.
данные поступают и обновляют переменную, но UI только обновляет, я выполняю действие над этими данными:
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");
}]);
данные закачиваются и, насколько мне известно, потому что они хранятся в Службе.dataObj.d Если I укажите мой HTML-шаблон в сервисе.dataObj этот объект обновляется и не заменяется, поэтому указатель должен оставаться и объект должен наблюдаться.
но он не меняется, если я не запускаю метод click (), в этом случае пользовательский интерфейс влияет, хотя Im просто запускает предупреждение.
что я упустил?
1 ответов
вам, вероятно, нужно использовать $apply()
:
$apply () используется для выполнения выражения в angular из-за пределов угловой структуры. (Например, из событий браузера DOM, setTimeout, XHR или сторонних библиотек).
function listener(data) {
$scope.$apply(function() {
Service.dataObj.d = data;
});
}