2

Grails フレームワークで AngularJs を使用し、Mysql をデータベースとして使用しています。

Facebookで発生する自動ビュー更新のような機能を実装したい。

今まで、JSON データを Grails Controller から angular controller に送信し、ビューを作成することができました。

しかし、データベースを変更し、ページをリロードせずにリアルタイムでビューが更新されるような機能を実装するにはどうすればよいですか。

私は出くわします

「$timeout と $http を使用して X ミリ秒ごとにポーリングする」

これは実際のアプリケーションにとって効率的ですか?

私の問題を解決するためのいくつかの対策または Angular の実装を提案してください。

4

3 に答える 3

1

MySQL を使用する必要がある場合は、パフォーマンスを考慮して少し長いルートをお勧めします。X秒ごとにポーリングし続けることは絶対に望まないでしょう。コメントに示されている SocketIO メソッドは良い方法です。ただし、デザインを少し拡張する必要があります。

「トピック」の概念を実装する必要があります。たとえば、Fruits というページがあり、誰かが Fruits について投稿したときに自動的に更新したいとします。したがって、/topics/fruits のような名前の「ルーム」(Socket.IO 用語で) を作成し、このページを閲覧しているすべての人にこのルームに「サブスクライブ」してもらいます。次に、誰かが果物について投稿した場合、この新しいデータを /topics/fruits ルームに「プッシュ」するだけで、そのビューにいる全員が更新を取得できます。

あなたはgrailsを使用しているので、これを指摘するための何かがあります: http://compiledammit.com/2012/09/05/websockets-and-grails-broadcasting-to-topics/。AngularJS 部分については、http: //www.html5rocks.com/en/tutorials/frameworks/angular-websockets/ を参照して、Socket.io クライアント部分を実装するだけです。その投稿の NodeJS 部分は無視してください。

于 2013-11-14T08:38:42.773 に答える
0

Eylen が投稿した例は魅力的です。さらに、コントローラーでイベントをリッスンしてモデルを更新する場合は、次のようにします。

grailsEvents.on('myEvent', function (data) {
    $scope.$apply(function(){
        $scope.mymodel = data.someField;
    });        
});
于 2014-02-22T06:44:19.370 に答える