【问题标题】:Socket.io run function on updateSocket.io 在更新时运行函数
【发布时间】:2016-03-10 10:33:08
【问题描述】:

socket.io 更新变量时如何运行函数。似乎 $watch 不起作用,或者可能是我做错了什么。

$http.get('/api/availabilitys/' + myId).then(response => {
  $scope.availability = response.data;
  socket.syncUpdates('availability', $scope.availability);
});


$scope.$watch('availability', function() {
  console.log('test'); //This is not printing on update
  angular.forEach(self.location, function (loc){
    loc.availability = $scope.availability.filter(function (a){
      return a.loc === loc._id;
    });
  });
});

【问题讨论】:

  • 在您的$http.get 中更新值后,尝试执行$scope.$apply()
  • 没有帮助。测试第一次打印。它不会在更新时打印。

标签: angularjs sockets socket.io


【解决方案1】:

由于封装,函数必须在同一个控制器/范围内。 angular的$scope不知道socket.io是否更新了变量,使用socket.on()监听器触发angular $watch

试试这个帖子里的代码Socket.IO message doesn't update Angular variable

你可以使用 socket.io 的 socket.on() 来代替 $watch

 var container = angular.module("AdminApp", []);

 container.controller("StatsController", function($scope) {

var socket = io.connect();

socket.on('message', function (msg) {
    console.log(msg);
    $scope.$apply(function() { $scope.frontEnd = msg; });
});
});

查看(末尾的帖子)此线程 How do I use $scope.$watch and $scope.$apply in AngularJS?

【讨论】:

  • 我知道如何使用 $watch。我的问题是为什么我的套接字更新没有触发 $watch。
  • $watch 应该可以工作。似乎不起作用的是套接字更新。套接字更新超出了角度的“范围”,请参阅此线程stackoverflow.com/questions/30976934/…
  • 我的套接字更新正在工作,因为 UI 中的 $scope.availability 变量正在更新,因此 Angular 知道它。
  • 变量 'avasilibility' 是否在 $watch 监听的范围内定义?这是关键点……
  • 是的,它设置在同一个范围内。
猜你喜欢
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
相关资源
最近更新 更多