2017-01-26 2 views
1

ich bin neu im signalR. Was ich tue, ist eine einfache Anwendung zu schaffen, die Namen db und Display-Client hinzufügen, aber ich eine Störung erhalte hier Code meines AngularJS"Eigenschaft 'client' undefined" angularJS mit SignalR kann nicht gelesen werden

 myApp.controller('firstController', function ($scope, $http) { 
    $scope.saveName = function() { 
     $http.post("/Name/saveName/", { userName: $scope.name }).then(function (response) { 
      $scope.loadNames(); 
     }) 
    } 
    $scope.loadNames = function() { 
     $http.get("/Name/getName/").then(function (response) { 
      $scope.nameList = response.data; 
     }) 
    } 
    $scope.loadNames(); 
    $scope.hub = $.connection.myHub; 
    $scope.notify = function() { 
     $scope.hub.client.UserAddHub = function (name) { 
      $scope.$apply(function() { 
       $scope.nameList.push(name); 
      }) 
     } 
     $.connection.hub.start(); 
    } 
    $scope.notify(); 
}); 

das ist „Eigentum‚Kunden‘undefinierter kann nicht lesen“, was ich schreibe auf Server-Seite

private static IHubContext userHubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
operations op = new operations(); 
     op.save(userName); 
     userHubContext.Clients.All.UserAddHub(userName); 

und das ist mein hubclass

[HubName("myHub")] 
public class MyHub : Hub 
{ 

} 

ich etwas fehle. Irgendein Vorschlag? Vielen Dank.

+0

Fügen Sie nach Ihrer $ scope.loadNames() - Zeile eine console.log() hinzu, um zu sehen, welche (wenn überhaupt) $ scope.nameList füllt – rrd

+0

das bekomme ich in der Konsole angular.js: 14328 TypeError: Die Eigenschaft 'client' von undefined kann nicht unter ChildScope gelesen werden. $ Scope.notify (myScript.js: 20) –

+0

Ich weiß nicht viel über SignalR, aber Ihr $ scope.hub ist null. Vergeuden Sie nicht Ihre Zeit mit einem Blick "client" .May be $ .connection.myHub funktioniert nicht richtig.Wenn Sie es überprüfen möchten, schreiben Sie einfach $ scope.hub = {}; dann wird es sagen UserAddHub ist undef – jitender

Antwort

1

Wenn Sie externes Skript verwenden signalR zu laden, stellen Sie sicher in Ihrer Layout.cshtml (oder anderen Layouts Ihrer verwenden), haben Sie diese Referenz hinzugefügt

<script src="~/signalr/hubs"></script> 

kurz nach signalR Zugabe. Es scheint nichts falsch mit dem Code zu sein und alles, was ich sehen kann, ist, dass Ihr Hub null ist.

Bearbeiten: Für zukünftige Leser, überprüfen Sie, ob Sie auch app.MapSignalR(); zu Ihrer Startup.cs-Klasse hinzugefügt haben.

+0

Ich habe hinzugefügt, aber jetzt wirft es einen weiteren Fehler .. Fehler beim Laden der Ressource: Der Server antwortete mit dem Status 404 (nicht gefunden) –

+0

Welche Ressource? Geh zu deinem Browser und suche nach http: // localhost:/signalr/hubs und STRG + F das Wort "myHub", du solltest es dort sehen. –

+0

Ich habe überprüft und da kein localhost:/signager/Hubs. Ich weiß nicht, was ich vermisse .. –

-1

nach dem $ scope.hub Zeile hinzu:

$scope.hub.client = {}; 

auch bemerkt, dass Sie $ .connection.myHub nennen; dann später rufen Sie die start() -Methode auf $ .connection.hub ... Sollte das sein $ .connection.myHub.start(); oder sollte es $ scope.hub.start() sein; ?

+0

Ich habe diese Zeile hinzugefügt. funktioniert immer noch nicht –

Verwandte Themen