2014-09-13 78 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); 

我想通知角的變化是不功能本身,但內部發生了什麼。只是一個不好的用途。