我正在尝试在我的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的变化不是函数本身,而是函数内部发生了什么。只是不好用。