将PrivatePub与Angular JS结合使用



我正在尝试在我的Angular应用程序中使用PrivatePub。我有一个聊天和消息是由AngularJS管理的,我的API后面是用Rails运行的,在我的控制器中,我使用助手发布到频道,我的问题是在订阅的客户端。以下是我尝试做的:

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中。我不知道我可以尝试其他什么解决方案。

好的,我发现了问题,我没有正确使用$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的变化不是函数本身,而是函数内部发生了什么。只是不好用。

最新更新