HoHsi
@HoHsi

Почему Angular.js не обновляет View при эвенте Socket.io?

Доброго дня!
Почему ангуляр не обновляет DOM при эвенте Socket.io? Хотя если вывести console.log data, то дата не undefined.

CoffeeScript:
do (window, angular, io)->
    adminApp = angular.module('adminApp', [])
    socket = io.connect '/', {
        path: '/admin/socket.io'
    }

    adminApp.controller 'ProgressCtrl', [
        '$scope'
        ($scope) ->
            $scope.stats = {
                cpu:
                    percent: 10
                memory:
                    percent: 70
            }

            socket.on 'server:stats', (data) ->
                $scope.stats.percent = data.os.percent * 100
    ]
  • Вопрос задан
  • 439 просмотров
Пригласить эксперта
Ответы на вопрос 2
Потому что сокет работает асинхронно, и angular не знает об изменении переменной. Для того чтобы angular проверил эту переменную, тебе нужно заставить его это сделать, для этого ты можешь либо вызвать функцию $scope.$apply() или $scope.$digest() или обернуть код который изменяет данные в конструкцию
$timeout(function(){
// тут код
})


Но с использованием функций $scope.$apply() и $scope.$digest() есть одна проблема, если digest уже запущен, angular падает, поэтому я советую тебе использовать $timeout
Ответ написан
Комментировать
dedalik
@dedalik
Веб разработчик
Доброго дня!

Вам нужно поставить scope.$watch() на изменения свойства в scope. Посмотрите в докуметации пример https://docs.angularjs.org/api/ng/type/$rootScope.Scope, раздел $watch
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы