使用 AngularJS 获取 SignalR 发送的值

Getting a value sent by SignalR with AngularJS

我正在尝试在屏幕上写一条非常简单的消息,当 发送一个值时,这条消息会得到更新。

我有一个非常简单的集线器:

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

在前端我有以下 :

<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;

使用观察者模式。基本上创建一个应该做以下事情的服务:

  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 上下文,这对我有用。

我收到了这篇文章:Consensus: SignalR + AngularJS