Двусторонняя привязка AngularJS теперь работает с веб-сокетами

Я подключаюсь к серверу через веб-сокеты с sockJS. Когда сообщения подписки извлекаются, он не обновляет файл $scope. Я использую службу для инкапсуляции соединения через веб-сокет. Вот моя сервисная функция.

    serviceMod.service('stompMessageService',function(){

        var mz = {msg:'initValue'};

    function connect() {

        var url='/hello/simplemessages';
        var socket = new SockJS(url);
        stompClient = Stomp.over(socket);

        stompClient.connect('user', 'guest', function(frame) {
            stompClient.subscribe("/topic/simplemessagesresponse", function(servermessage) {

                console.log('server msg: '+servermessage);
                mz.msg=servermessage;
            });
        });
    }
   connect();
    return mz;
    });

Мой контроллер

serviceMod.controller('stats', function($scope,stompMessageService) {

    $scope.mm=stompMessageService;

});  

на html-странице {{mm.msg}} . Это дает только первое присвоенное значение 'initValue', а не обновление сервера (ответ сервера приходит. Я тестировал с помощью console.log()..). .. Любой может сообщить мне, где может быть проблема


person Débora    schedule 14.09.2014    source источник
comment
OMG, еще один из $apply... просто поищите немного о $apply и цикле дайджеста.   -  person coma    schedule 14.09.2014
comment
@coma, Большое спасибо. искал.. не нашел. наконец я разместил. если вы поместите свое руководство в качестве ответа, я приму его.   -  person Débora    schedule 14.09.2014
comment
Хорошо, подождите немного, я не хотел быть грубым, правда, но 90% ng-вопросов здесь касаются $apply.   -  person coma    schedule 14.09.2014
comment
Короткий ответ заключается в том, что вам нужно инициировать $apply, поскольку событие находится вне цикла дайджеста Angular, поэтому простой способ заставить его работать — gist.github.com/coma/b21433d7fd69bb290ca2 , но я предлагаю вам больше узнать о $apply, обновление $rootScope стоит дорого, поэтому в моем случае (я использую socket.io) у меня есть служба, которая принимает области в качестве аргументов и оборачивает их прослушивателями событий сокета (и отменяет их привязку к области видимости. $destroy). Но поверьте мне, прочитайте об этом. У вас есть оболочка: github.com/bendrucker/angular-sockjs.   -  person coma    schedule 14.09.2014