将PrivatePub与Angular JS一起使用

时间:2014-09-13 12:16:31

标签: ruby-on-rails angularjs publish-subscribe private-pub

我试图在我的Angular应用中使用PrivatePub。我的聊天和消息由AngularJS管理,我的API背后运行Rails,在我的控制器中我使用助手发布到频道,我的问题在客户端与Subscribe。这是我尝试做的事情:

chat.controller("MessageController", ['$scope','Message','Project', function($scope,Message,Project) {
    //Fetch messages
    Message.query(function(data) {
        $scope.messages = data;
    });

    PrivatePub.subscribe(Project.channel, function(data, channel) {
        $scope.messages.push(data.message);
    });
}]);

我试图在我的PrivatePub订阅中使用$ apply和$ watch,无法更新我的范围。我的PrivatePub函数应该在Angular之外,但它收到的数据应该添加到$ scope.I不是我可以尝试的其他解决方案。

1 个答案:

答案 0 :(得分:2)

好的我发现了问题,我没有正确使用$apply,我基本上是这样做的:

$timeout(function () {
  $scope.$apply(function($scope) {
    PrivatePub.subscribe("/mychannel", function(data, channel) {
      $scope.addMessage(data.chat_message);
    });
  });
}, 0);

而不是:

$timeout(function () {
   PrivatePub.subscribe("/mychannel", function(data, channel) {
     $scope.$apply(function($scope) {
       $scope.addMessage(data.chat_message);
     });
   });
}, 0);

我想要通知Angular的更改不是函数本身,而是内部发生的事情。只是一个坏用途。