私はAngularを初めて使っています。ユーザーにリーダーボードを見せたいこれを達成するために、私はそうのようなコントローラと2つのサービスを作成しました:角度のあるサービスに交換可能な方法でアクセスする
LeaderboardController
尋ねLeaderboardService
リーダーボードの情報について:// Controller angular.module("App.Controllers.LeaderboardController", [ "App.Services.LeaderboardService" ]) .controller("LeaderboardController", ($scope, LeaderboardService) => { $scope.users = LeaderboardService.fetch(); }); // Socket Service angular.module('App.Services.SocketService', [ "socketio", "App.Services.LeaderboardService" ]) .service('SocketService', function (io, $state, LeaderboardService) { this.socket .on("connect",() => { console.log("Socket connected"); }) .on("get leaderboard data emit", (res) => { LeaderboardService.users = res; }) .on("disconnect",() => { console.log("Socket disconnected"); }); }); // Leaderboard Service angular.module('App.Services.LeaderboardService', [ "App.Services.SocketService" ]) .service('LeaderboardService', function (SocketService) { this.users = []; this.fetch =() => { console.log("fetching..."); SocketService.emit("get leaderboard data"); } });
これが流れています。
LeaderboardService
SocketService
にサーバーに接続し、リーダーボード情報を取得するように指示します。SocketService
Leaderboard○Service
を呼び出し、必要な情報を提供します。
ただし、問題があります。 SocketService
とLeaderboardService
はお互いに依存しているので、Angularはそれに不平を言う。
私は少し複雑さを取り除きたいです。次のような方法がありますか。
// PSEUDO CODE
this.socket.on("get leaderboard data emit", (res) => {
angular.resolveController("LeaderBoardController", ($scope) {
$scope.users = res;
});
});
私は自分でコントローラを呼び出して再生できますか?
私がこれを行うことに関するベストプラクティスを学ぶことができれば驚くはずです。
ありがとうございます。
あなたsocketioモジュールは何ですか?外部スクリプトの場合はコードやリンクを投稿できますか? – Gatsbill
基本的に 'SocketService'の' this.socket'は 'io'を指します。これは基本的にsocket.ioです。私は自分の質問に関連する部分だけを掲載しました。 – Aris