2017-01-26 3 views
1

Я новичок в signalR. то, что я делаю это создание простое приложение, которое добавить имя БД и отображение на клиенте, но я получаю сообщение об ошибке «Не удается прочитать свойство„клиента“неопределенных» вот мой angularJS код«Невозможно прочитать свойство« клиент »неопределенного« angularJS с SignalR

 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(); 
}); 

это то, что я пишу на стороне сервера

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

и это мой hubclass

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

} 

Я-то отсутствует. Любое предложение? Спасибо.

+0

После вашей строки $ scope.loadNames() добавьте console.log(), чтобы увидеть, что (если что-либо) заселяет $ scope.nameList – rrd

+0

вот что я получаю в консоли angular.js: 14328 TypeError: Невозможно прочитать свойство «клиент» неопределенного в ChildScope. $ Scope.notify (myScript.js: 20) –

+0

мало что знает о SignalR, но ваш $ scope.hub является нулевым, не теряйте времени, глядя на «клиент». Может быть, $ .connection.myHub не работает должным образом. Если вы wana проверяете его, просто напишите $ scope.hub = {}; то он скажет UserAddHub is undef – jitender

ответ

1

Если вы используете внешний скрипт для загрузки signalR, убедитесь, что в вашем Layout.cshtml (или любых других макетах ваши используют), вы добавили эту ссылку

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

только после добавления signalR. Кажется, что нет ничего плохого в коде, и все, что я вижу, это ваш хаб.

Редактировать: Для будущих читателей дважды проверьте, что вы также добавили app.MapSignalR(); в свой класс Startup.cs.

+0

Я добавил , но теперь его бросает еще одна ошибка .. Не удалось загрузить ресурс: сервер ответил статусом 404 (не найдено) –

+0

Какой ресурс? Перейдите в свой браузер и ищите http: // localhost:/signalr/hubs и CTRL + F слово «myHub», вы должны увидеть его там. –

+0

Я проверил и там нет localhost:/signalr/hubs. Не знаю, чего я не вижу. –

-1

После вашего $ scope.hub линии добавить:

$scope.hub.client = {}; 

заметил также, что вы звоните $ .connection.myHub; то позже вы вызываете метод start() на $ .connection.hub ... Должно ли это быть $ .connection.myHub.start(); или должен быть $ scope.hub.start(); ?

+0

Я добавил эту строку. все еще не работает –