2014-09-13 5 views
1

내 Angular 앱에서 PrivatePub을 사용하려고합니다. 나는 채팅을했고 메시지는 AngularJS에서 관리하고, API는 레일즈에서 실행 중이며, 내 컨트롤러에서는 도우미를 사용하여 채널에 게시합니다. 내 문제는 구독과 함께 클라이언트 측에 있습니다. 여기에 내가 수행하려고 할 것입니다 :Angular JS에서 PrivatePub 사용

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 밖에 있어야하지만받는 데이터는 $ 범위에 추가해야합니다. 다른 해결책을 시도 할 수 없습니다.

+1

'작동하지 않는다 '는 설명이별로 없습니다. 어떻게'$ apply'를 사용하려고 시도 했습니까? 오류가 발생 했습니까? – charlietfl

+0

처음에는'Error : $ digest already in progress'를 사용했는데, 이것을 사용할 때 분명히 권장되지 않는 if (! $ scope. $$ phase) {// $ apply}와 같은 답변을 발견했습니다. 내 코드가 전혀 실행되지 않습니다. $ watch를 사용하면 코드가 실행되지만 범위가 업데이트되지 않습니다. –

+0

'$ timeout'을 사용해보세요. 다이제스트가 완료 될 때까지 기다릴 것입니다. – charlietfl

답변

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

변경 사항은 아니다 기능 자체는 있지만 내부에서 일어난 일. 그냥 나쁜 사용.