AngularJS-$手表不工作

AngularJS-$手表不工作,angularjs,websocket,stomp,sockjs,Angularjs,Websocket,Stomp,Sockjs,场景:将跺脚与我们的角度。在用户登录时,调用发送数据的stomp服务,然后在模块控制器中获取数据 跺脚服务 var wrappedSocket = { init: function(url) { stompClient = Stomp.over(new SockJS(url)); }, connect: function(successCallback, errorCallback) { stompClient.connect({}, f

场景:将跺脚与我们的角度。在用户登录时,调用发送数据的stomp服务,然后在模块控制器中获取数据

跺脚服务

var wrappedSocket = {

     init: function(url) {
      stompClient = Stomp.over(new SockJS(url));
     },
     connect: function(successCallback, errorCallback) {

      stompClient.connect({}, function(frame) {
          //$rootScope.$apply(function() {
          $timeout(function () {
        successCallback(frame);
          });
      }, function(error) {
          //$rootScope.$apply(function(){
          $timeout(function () {
        errorCallback(error);
          });
            });
     },
     subscribe : function(destination, callback) {
      stompClient.subscribe(destination, function(message,headers) {
          //$rootScope.$apply(function(){
          $timeout(function () {
          callback(message,headers);
          });
              }); 
     },
     send: function(destination, headers, object) {
      stompClient.send(destination, headers, object);
     }
   }

   return wrappedSocket;
模块控制器

var initializing = false;

    $timeout(function () {
        alert('timeout');
        $scope.$watch(svc.getMessage, function (v) {

                if (initializing) {
                $timeout(function () { initializing = false; });

            } else {
                if (v != '') {

                    console.log(v);
                    $scope.notifications = v;
                    $scope.notification_count = $scope.notifications.length;

                }
                }

        });

        }, 3000);
这里svc是Sockjs
svc.setMessage($scope.messages)的一个实例

最终将服务中的
$rootScope.$apply(function(){
更改为
$timeout(function(){
)。但后来在模块控制器中发现,
$watch
不工作/调用

预期结果-应在
$watch

发生了什么事-$watch未调用导致未显示踩踏消息

  • 如何调用
    $scope.$watch(svc.getMessage,
    功能(v)
  • $watch
    的替代解决方案每次都有效吗
  • 了解到使用$rootScope.$apply(function(){不是一个好的做法:实际上,调用它是为了让angular知道背后发生的更改。什么是svc.getMessage?为什么在3秒钟后开始观看?您希望发生什么以及会发生什么?了解到使用$rootScope.$apply(function(){不是一个好的做法:实际上,调用它来让angular知道背后发生的更改是正确的。什么是svc.getMessage?为什么在3秒钟后开始观看?您希望发生什么,以及会发生什么?