我试图在屏幕上写一条非常简单的消息,当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;
答案 0 :(得分:1)
使用观察者模式。基本上创建一个应该做以下事情的服务:
支持以下方法:
示例:强>
(从我的解决方案中提取的伪代码(大到显示全部)):
服务器(此处称为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();
});
}
在您的Controller中(注入服务并注册事件):
hubWrapperServer.registerToEvent(function () {
serviceHub.getAllDevices().then(function (params) { // Do something in your controller
});
});
答案 1 :(得分:0)
poker.client.showAllCards = function (show) {
$scope.allCardsShowing = show;
$scope.$apply();
};
$scope.$apply()
,刷新Angularjs上下文,这对我有用。
我收到以下表单文章:Consensus: SignalR + AngularJS