使用 AngularJS 获取 SignalR 发送的值
Getting a value sent by SignalR with AngularJS
我正在尝试在屏幕上写一条非常简单的消息,当 signalr 发送一个值时,这条消息会得到更新。
我有一个非常简单的集线器:
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;
使用观察者模式。基本上创建一个应该做以下事情的服务:
- 创建集线器连接(处理启动、重新连接......)
例如支持以下方法:
- 注册事件(将呼叫者添加到包含
的列表
感兴趣的会员。)
- 注销活动(将呼叫者从感兴趣的成员列表中删除。)
- 在这种情况下,来自服务器的新消息通知所有观察者
示例:
(从我的解决方案中提取的伪代码(为了显示全部)):
服务器(此处称为 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
});
});
poker.client.showAllCards = function (show) {
$scope.allCardsShowing = show;
$scope.$apply();
};
$scope.$apply()
,刷新 Angularjs 上下文,这对我有用。
我收到了这篇文章:Consensus: SignalR + AngularJS
我正在尝试在屏幕上写一条非常简单的消息,当 signalr 发送一个值时,这条消息会得到更新。
我有一个非常简单的集线器:
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;
使用观察者模式。基本上创建一个应该做以下事情的服务:
- 创建集线器连接(处理启动、重新连接......)
例如支持以下方法:
- 注册事件(将呼叫者添加到包含
的列表 感兴趣的会员。) - 注销活动(将呼叫者从感兴趣的成员列表中删除。)
- 注册事件(将呼叫者添加到包含
- 在这种情况下,来自服务器的新消息通知所有观察者
示例:
(从我的解决方案中提取的伪代码(为了显示全部)):
服务器(此处称为 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
});
});
poker.client.showAllCards = function (show) {
$scope.allCardsShowing = show;
$scope.$apply();
};
$scope.$apply()
,刷新 Angularjs 上下文,这对我有用。
我收到了这篇文章:Consensus: SignalR + AngularJS