【问题标题】:SignalR client function cant access to updated $scope variablesSignalR 客户端函数无法访问更新的 $scope 变量
【发布时间】:2016-03-31 12:22:06
【问题描述】:

我使用 AngularJS、.NET 4.5 和 SignalR 制作了一个 Web 应用程序。 应用程序中的一页包含要执行的任务列表,我通过 AJAX 和 Web 方法从服务器获取任务列表。

之后,我注册到 SignalR Hub,它的工作是更新任务状态。

我有角度服务用于连接 SignalR 以及函数的开、关和调用:

.factory('hubProxy', ['$rootScope',
  function ($rootScope) {

      function backendFactory(hubName) {
          var connection = $.hubConnection("http://localhost:52158/");
          var proxy = connection.createHubProxy(hubName);
          proxy.on("dummy", function () { // do not remove - dummy is must here
          });
          connection.start().done(function () { });

          return {
              on: function (eventName, callback) {
                  proxy.on(eventName, function (a,b,c,d,e,f,g,h,i,j) {
                      $rootScope.$apply(function () {
                          if (callback) {
                              callback(a,b,c,d,e,f,g,h,i,j);
                          }
                      });
                  });
              },
              off: function (eventName, callback) {
                  proxy.off(eventName, function (result) {
                      $rootScope.$apply(function () {
                          if (callback) {
                              callback(result);
                          }
                      });
                  });
              },
              invoke: function (methodName, arg1, arg2, callback) {
                  proxy.invoke(methodName, arg1, arg2)
                  .done(function (result) {
                      $rootScope.$apply(function () {
                          if (callback) {
                              callback(result);
                          }
                      });
                  });
              }
          };
      };

      return backendFactory;
  }]);

之后我得到了任务中心:

var tasksHub = hubProxy('taskHub');

然后要更改任务状态,我正在使用以下内容:

tasksHub.invoke("changeTaskStatus", task, status);

直到这里一切正常。

服务器集线器功能 (changeTaskStatus) 执行以下操作:

task.ChangeStatus((GeneralVars.PROJECT_STATUS)status);
Clients.All.taskStatusChanged(task.t_id,status);

所以我正在获取任务 ID 和状态,并想在客户端更改它,我得到它是这样的:

tasksHub.on("taskStatusChanged", function (t_id, status) {
var task = null;
for (var i = 0; i < $scope.levelTasks.length; i++) {
    if ($scope.levelTasks[i].t_id == t_id) {
        task = $scope.levelTasks[i];
        break;
    }
}
task.status = status;
$scope.$apply();
}

我的问题是,“taskStatusChanged”函数中的客户端函数不知道更新的 $scope 变量。 即使我是通过 ajax 从服务器获取它,$scope.levelTask​​s 也不受限制。如果我将“taskStatusChanged”函数移动到 ajax 回调(其中 $scope.levelTask​​s 正在初始化),那么该函数将知道 $scope.levelTask​​s 但会注册多次(每次我从服务器获取任务时)

客户端 SignalR 函数是否可以访问更新后的 $scope 变量?

【问题讨论】:

    标签: c# asp.net angularjs angularjs-scope signalr


    【解决方案1】:

    所以我解决它的方法是为任务创建一个服务,然后在信号器函数中我从任务服务获取任务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多