2017-01-25 11 views
0

私はangularjsの新機能で、サーバーへの接続を確立し、その結果をユーザーに動的に表示したいと考えています。これまで私は試しました:角型双方向バインディングが機能しない

angular.module('myApp.controllers', []).controller('socketsController', function($scope) { 

    $scope.socket = { 
    client: null, 
    stomp: null 
    }; 

    $scope.reconnect = function() { 
    setTimeout($scope.initSockets, 10000); 
    }; 

    $scope.notify = function(message) { 
    $scope.result = message.body; 
    }; 

    $scope.initSockets = function() { 
    $scope.socket.client = new SockJS('/resources'); 
    $scope.socket.stomp = Stomp.over($scope.socket.client); 
    $scope.socket.stomp.connect({}, function() { 
     $scope.socket.stomp.subscribe('/user/topic/messages', $scope.notify); 
    }); 
    $scope.socket.client.onclose = $scope.reconnect; 
    }; 
    $scope.initSockets(); 
}); 

しかし、{{result}}を使用すると何も表示されません。

更新日 サーバーの応答はconsole.log(message.body)で完全に正しいです。

+0

ブラウザのdevtoolsにエラーがありますか? – MMK

+0

いいえ、何も表示されません – Khodabakhsh

+0

コード内のどこに$ scope.resultをリセットしていますか? – MMK

答えて

1

私は、コールバックはスコープを適切に取っていないと思います。 call $ scopeを試してください。$ apply();あなたは結果までのmessage.bodyを取り付けた後:。

$scope.notify = function(message) { 
    $scope.result = message.body; 
    $scope.$apply(); 
    }; 

$スコープ$(適用)

+1

ありがとうございます。非常に役立ちます。 – Khodabakhsh

+0

私の喜び:-) –

1

はタイムアウト機能の内部でそれを呼び出しますが、$を注入...すべてのバインディングを更新しますwhcih角度ダイジェストサイクルをトリガー最初にタイムアウトすると、ダイジェストサイクルが呼び出され、値が更新されます。

$timeout(function(){ 
$scope.result = message.body;}); 
関連する問題