如何在角度js中使用带有多个控制器的SingalR

时间:2015-09-26 10:54:05

标签: javascript c# angularjs signalr

我将使用带角度的SingalR;我的要求是,只有一次获取连接ID作为单例模式并在单个应用程序中使用,因为在我的情况下,浏览器将首次加载,以便clientid维护控制器中的其余视图。

所以第一个问题是我创建的工厂如下所示,但是当我使用这个工厂时,我收到了错误:

  

undefined factory.Uncaught ReferenceError:signalRHubProxy未定义(...)。

我已经在服务器端设置了每个东西的索引上完成了每个包含js文件。

在给定的代码中,我的问题是我该怎么做。任何示例代码?

  1. 为什么不采用工厂方法。
  2. 如果有任何消息被激活,我怎样才能在每个控制器上使用addChatMessage监听器。
  3. 希望一切顺利。

    如果我使用此代码正常工作还有一件事,但我的方案是我在上面定义的。

    如果我在索引页面上这样简单。

    index.html
    
    $(function () {
                $.connection.hub.url = Config._HubConnectionUrl;
                $.connection.hub.logging = true;
    
                var chat = $.connection.communicationHub;            
                chat.client.addChatMessage = function (userId, message) {
                    debugger
                    console.log("wajih");
                };
    
                $.connection.hub.start().done(function () {
                   debugger
                   $("#clientId").text($.connection.hub.id);             
                });
            });
    

    当我发送任何消息addmessage事件触发器时, 但上面我想在多个控制器上使用以下结构。 这是我的代码。

    RealTimeFactory.js Factory:-
     'use strict';
    
    var singalR = angular.module('signalRHubProxy', []);
    
    singalR.factory('signalRHubProxy', function ($rootScope) {
        function signalRHubProxyFactory(serverUrl, hubName, startOptions, $rootScope) {
            var connection = $.hubConnection();
            var proxy = connection.createHubProxy(hubName);
            connection.start(startOptions).done(function () {
                  debugger
            });
    
            return {
                on: function (eventName, callback) {
                    proxy.on(eventName, function (result) {
                        $rootScope.$apply(function () {
                            if (callback) {
                                callback(result);
                            }
                        });
                    });
                },
                off: function (eventName, callback) {
                    proxy.off(eventName, function (result) {
                        $rootScope.$apply(function () {
                            if (callback) {
                                callback(result);
                            }
                        });
                    });
                },
                invoke: function (methodName, callback) {
                    proxy.invoke(methodName)
                        .done(function (result) {
                            $rootScope.$apply(function () {
                                if (callback) {
                                    callback(result);
                                }
                            });
                        });
                },
                connection: connection
            };
        };
    
        return signalRHubProxyFactory;
    });
    
    My Global controller:-
    
    var app = angular.module('sgApp.controllers', ['signalRHubProxy']);
    

    现在我想在我的控制器中使用这个工厂,但是如上所述给出了错误。

    ChatController.js
    
    app.controller('ChatCtrl', function ($rootScope, $scope, signalRHubProxy) {
    
        //var clientHubProxy = signalRHubProxy(
        //   signalRHubProxy.defaultServer, 'communicationHub',
        //       { logging: true });
    
        //clientHubProxy.on('addChatMessage', function (data) {
        //    debugger
        //    var x = clientHubProxy.connection.id;
        //});
    
    });
    
    HomeController.js
    
    app.controller('HomeCtrl', function ($rootScope, $scope, signalRHubProxy) {
    
        //var clientHubProxy = signalRHubProxy(
        //   signalRHubProxy.defaultServer, 'communicationHub',
        //       { logging: true });
    
        //clientHubProxy.on('addChatMessage', function (data) {
        //    debugger
        //    var x = clientHubProxy.connection.id;
        //});
    
    });
    

    这是ServerSide Code HUB: -

    public class CommunicationHub : Hub
        {
            public void SendTo(string userId, string message)
            {
                Clients.Client(userId).addChatMessage(userId, message);
            }
        }
    

1 个答案:

答案 0 :(得分:0)

@Override
public String toString() {
    return //here you have to define what better describe the Meal or Drink;
}