Получение значения, отправленного SignalR с AngularJS

Я пытаюсь написать очень простое сообщение на экране, что, когда сигнализатор отправляет значение, это сообщение обновляется.

У меня очень простой хаб:

public class Chat : Hub
{
    public Task Send(string message)
    {
        return Clients.All.InvokeAsync("Send", message);
    }
}

На входе у меня есть следующий HTML:

<div ng-app="myApp" ng-controller="myCtrl">
    <p ng-bind="value"></p>
</div>

И скрипт такой:

var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope) {
    $scope.value = "My Test Value";
});

chatConnection.on('Send', (message) => {
    app.scope.value = message;
});

Я не понимаю, как мне получить доступ к этому параметру значения, чтобы я мог его обновить.

РЕДАКТИРОВАТЬ:

Часть SignalR работает, сообщение приходит. Проблема в том, что я не уверен, как обновить значение, которое находится внутри этого контроллера. app.scope.value = message;

2 ответа

Используйте шаблон наблюдателя. В основном создайте сервис, который должен делать следующие вещи:

  1. Создает соединение с концентратором (обрабатывает запуск, переподключение,....)
  2. Поддержите, например, следующие методы:

    • зарегистрироваться на событие (добавляет звонящего в список, который содержит
      заинтересованные участники.)
    • отменить регистрацию для события (удаляет абонента из списка с заинтересованными участниками.)
  3. В случае появления нового сообщения с сервера сообщите всем наблюдателям

Пример:

(Псевдокод извлечен из моего решения (чтобы большой показать все)):

Сервер (здесь он называется hubWrapperService):

    var yourHubProxy = $.connection.yourHub;        
        yourHubProxy.client.yourMethodWhichServerCanCall= function (params){      
           // Inform observers. Iterate to over all your observers and inform them                     
           notifyObservers(params);
        };

    // Start connection.
    $.connection.hub.start().done(function () {            
        ...
        });

    }).fail(function (error) {...

    });

   function registerToEvent(callback) {
                $log.debug("ServiceHub:  getConnectionEvent called");
                // Add caller to you observer list. (here serviceInitObservers)
            }

   function notifyServiceInitObservers() {
                angular.forEach(serviceInitObservers, function (callback) {
                    callback.callback();
                });
        }

В вашем контроллере (ввести сервис и зарегистрироваться на события):

hubWrapperServer.registerToEvent(function () {
        serviceHub.getAllDevices().then(function (params) {    // Do something in your controller
        });
      });

Существует также услуга оболочки, доступная https://github.com/JustMaier/angular-signalr-hub

poker.client.showAllCards = function (show) {  
    $scope.allCardsShowing = show;
    $scope.$apply();
};

$scope.$apply()обновить контекст Angularjs, и это работает для меня.

Я получаю эту форму статьи: Консенсус: SignalR + AngularJS

Другие вопросы по тегам