0
私のアプリでチャットのサービスを作成しようとしています。これは私のsignalR角度サービスのコードです。私がしたいのは、私のコードを繰り返さないことです、私は最初の非機能的なケースのような別の関数を作成し続けたいと思いますが、それをどうやって行うのか分かりませんでした。誰かがどこに問題があるのか、その2つのタイプのリターンの違いは何かを教えてくれますか?どちらの場合も、初期化されたものの、2番目のものだけがサーバー側からの呼び出しをキャッチします。そこにこの問題ここAngularJS with signalRサービスがサーバコールで機能しない
(function() {
app.service("SignalRService", ["$rootScope", SignalRService]);
"use strict";
function SignalRService($rootScope) {
//this is not working version
return {
channelHub: null,
initialize: function() {
//var chatHub = $.connection.channelHub;
var connection = $.hubConnection();
this.channelHub = connection.createHubProxy('channelHub');
// Start Hub
connection.start().done(function() { });
},
getMsg: function (eventName, callback) {
this.channelHub.on(eventName, function() {
var args = arguments;
$rootScope.$apply(function() {
callback.apply(this.channelHub, args);
})
})
console.log(eventName);
}
}
//but if i retype it like this its working w/o any problem
return {
getMsg: function (eventName, callback) {
var connection = $.hubConnection();
var channelHub = connection.createHubProxy('channelHub');
channelHub.on(eventName, function() {
var args = arguments;
$rootScope.$apply(function() {
callback.apply(channelHub, args);
});
});
connection.start().done(function() { });
}
};
}})();
私は機能とdebugerとコンソールログに応じて初期化SERVIS呼び出す私の角度コントローラは、機能「newChannelMessageが初期化されているに関連するものは何もありませんし、エラーが
がスローされませんので、私はハブを含んでいませんでし私は「newChannelMessage」関数を呼び出すが、それは、クライアント側でこの機能に到達することはありませんし、何もRLY私の実装方法の第一の場合には起こらないのはここ(function() {
app.controller("ChannelController", ["$scope", "$http", "SignalRService" ]);
function ChannelController($scope, $http, SignalRService) {
"use strict";
//**--------------------signalR--------------------------------**//
SignalRService.initialize();
SignalRService.getMsg("newChannelMessage", function (message, username) {
$scope.channel.push(message, username);
});
}})();
は私のサーバーのコントローラである
public class CommentController : BaseApiController
{
private ApplicationDbContext _context;
private CommentRepository _repository;
private IHubContext _ctx;
public CommentController()
{
//initialize of db context
_context = new ApplicationDbContext();
_repository = new CommentRepository();
_ctx = GlobalHost.ConnectionManager.GetHubContext<ChannelHub>();
}
[Route("create")]
[HttpPost]
public async Task SendMsg([FromBody] JObject data)
{
var channelId = data["idData"].ToObject<int>();
Comment comment = data["channelMsgData"].ToObject<Comment>();
comment.UserId = await GetIdUsingUsername(comment.UserName);
await _repository.StoreChannelMessage(comment, channelId);
_ctx.Clients.All.newChannelMessage(comment.Message, comment.UserName);
}
public async Task<string> GetIdUsingUsername(string username)
{
var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == username);
var id = user.Id;
return id;
}
}