2014-09-13 44 views
1

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

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订阅,没有办法更新我的范围。我的PrivatePub函数应该在Angular之外,但它收到的数据应该被添加到$ scope。我不会尝试其他解决方案。

+1

“它没有工作”没有太多解释。你是如何尝试使用'$ apply'以及发生了什么?抛出的错误? – charlietfl 2014-09-13 12:24:07

+0

首先我得到了'错误:$ digest已经在进行中',我发现了一些答案,比如这个'if(!$ scope。$$ phase){// $ apply}',当我使用它的时候不推荐这样做我的代码根本没有执行。当我使用$ watch时,我的代码被执行,但范围没有更新。 – 2014-09-13 13:24:21

+0

尝试使用'$ timeout',将等待摘要完成 – charlietfl 2014-09-13 13:26:25

回答

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); 

我想通知角的变化是不功能本身,但内部发生了什么。只是一个不好的用途。