【发布时间】:2014-02-03 05:49:11
【问题描述】:
使用 Angular 解决一个有趣的问题,并从 SignalR 频繁更新。
在服务器上,我有一个管理器的单例实例,当前设置为每 500 毫秒发送一次更新
public void StartTest() {
var i = 0;
while (i < 1000) {
if (_cancelRequested) {
_cancelRequested = false;
return;
}
_context.Clients.All.sent(i++);
Thread.Sleep(500);
在我看来,我使用“controller as vm”语法:
{{vm.status}}
终于在我的控制器中(在 signalR 初始化时):
// Using 'Controller As' syntax, so we assign this to the vm variable (for viewmodel).
var vm = this;
vm.status = '';
...
function activateSignal() {
var hub = $.connection.mailerHub;
hub.client.sent = function (counter) {
log(' singal_R ## event: sent ' + counter); // <-- this works on every update
vm.status = counter; // this works only on last update, or if stop is pressed it writes the most recent update.
};
该代码做了两件事:写入日志(这会向浏览器发送 toastr 更新),并在控制器上设置状态变量。
日志 cmets 按预期反映在浏览器中,每半秒我都会收到带有事件编号的漂亮 toastr 通知,但是设置变量没有任何效果,直到我请求停止或达到 999。
当我按下停止时,vm.status 被写出最后一个序列号,或者当整个事情停止时,它写出 999。
所以在 vm 上设置属性的频率似乎有些问题?我需要像 $scope.$watch 这样的东西来完成这项工作吗?
【问题讨论】:
标签: javascript angularjs signalr