AngularJS no puede usar el alcance dentro de una devolución de llamada websocket

$scope no funciona dentro de una función de devolución de llamada.

angular.
module('common').
controller('bidVBoxController', ['$scope', '$location','$element', 'Socket', 'Bid',
 function($scope, $location, $element, Socket,Bid){
  var self = this;
  self.socket = new Socket("ws://192.168.225.59:8010/ws/bidData/");
  $scope.placeBid = function(){
    self.socket.send({
      type: "place_bid",
      data: {
        bidId: $scope.bid.id
      }
    });
  };
  console.log($scope.bid);
  $scope.bid.top_bid_data="sss";//This works.
  self.socket.onmessage(function(event) {
      var data = JSON.parse(event.data);
      console.log($scope.bid);//This doesn't work
      $scope.bid.top_bid_data=data["message"];//This doesn't work
  });
}])

na función de devolución de llamada se pasa a laself.socket.onmessage, que se supone que actualiza$scope variable. Pero parece que eso no funciona. Por favor ayuda

Actualización1:

Este controlador se usa con una directivabidVBox y hay múltiples elementos:

<bid-v-box ng-repeat="bid in bids">
</bid-v-box>

Cuando la función de devolución de llamada se ejecuta en la primerabid-v-boxontrolador de @ elemento,$scope.bid.top_bid_data=data["message"]; actualiza el alcance del último elemento y no del primero. También he intentado usar$scope.$apply(function(){$scope.bid.top_bid_data=data["message"];}). Pero eso no funcionó.

Respuestas a la pregunta(1)

Su respuesta a la pregunta