【发布时间】:2014-11-05 09:39:58
【问题描述】:
我在我的应用程序中使用 SignalR,它适用于简单的 javascript,但现在我尝试使用 angular-wrapper https://github.com/JustMaier/angular-signalr-hub 重写它,但在尝试连接到我的集线器时遇到了错误:
Error: SignalR: Connection must be started before data can be sent. Call .start() before .send()
at Object.signalR.fn.signalR.send (http://localhost:47124/Scripts/jquery.signalR-2.1.1.js:789:23)
at Object.hubProxy.fn.hubProxy.invoke (http://localhost:47124/Scripts/jquery.signalR-2.1.1.js:2609:24)
at Hub.invoke (http://localhost:47124/Scripts/angular-signalr-hub.js:30:28)
at Hub.(anonymous function) [as loadRecentPhotos] (http://localhost:47124/Scripts/angular-signalr-hub.js:49:24)
at Object.PhotoMarkers.load (http://localhost:47124/Scripts/AngApp.js:47:17)
at http://localhost:47124/Scripts/angular.js:10836:21
at Scope.$eval (http://localhost:47124/Scripts/angular.js:12673:28)
at pre (http://localhost:47124/Scripts/angular.js:19943:15)
at nodeLinkFn (http://localhost:47124/Scripts/angular.js:6684:13)
at compositeLinkFn (http://localhost:47124/Scripts/angular.js:6098:13) <div class="modal-body" ng-init="markers.load()">
这是我的代码:
angular.module('FlickrMaps', ['SignalR'])
.factory('PhotoMarkers', ['$rootScope', 'Hub', function ($rootScope, Hub) {
var PhotoMarkers = this;
//Hub setup
var hub = new Hub('photos', {
listeners: {
'addTotalPhotosCount': function (total) {
PhotoMarkers.totalCount = total;
$rootScope.$apply();
},
'initPhotoMarker': function (photo) {
var photolocation = new window.google.maps.LatLng(photo.Latitude, photo.Longitude);
PhotoMarkers.all.push(new window.google.maps.Marker({
position: photolocation,
title: photo.Title,
photoThumb: photo.PhotoThumbScr,
photoOriginal: photo.PhotoOriginalScr
}));
$rootScope.$apply();
},
'photosProcessed': function () {
PhotoMarkers.processedPhotosCount++;
$rootScope.$apply();
},
},
methods: ['loadRecentPhotos'],
errorHandler: function (error) {
console.error(error);
}
});
//Variables
PhotoMarkers.all = [];
PhotoMarkers.processedPhotosCount = 0;
PhotoMarkers.totalCount = 0;
//Methods
PhotoMarkers.load = function () {
$('#myModal').modal({
backdrop: 'static',
keyboard: false
});
hub.loadRecentPhotos();
};
return PhotoMarkers;
}])
.controller('MapController', ['$scope', 'PhotoMarkers', function ($scope, PhotoMarkers) {
$scope.markers = PhotoMarkers;
}])
有人知道吗?
【问题讨论】:
-
好吧,错误消息说要调用
start。你试过吗? -
据我了解,这个包装器(角度服务)github.com/JustMaier/angular-signalr-hub 的想法是控制集线器启动并简化客户端集线器侦听器和方法的声明。
-
这与 signalr 无关,但你为什么使用 jquery modal,尝试使用 angularJS 指令来做到这一点angular-ui.github.io/bootstrap
-
好吧,我是 Angular 新手,只是迈出第一步。不过下次我会用,谢谢!
-
@AlexanderSmith 您是否愿意接受另一个包装器解决方案,我可以发布一个更灵活的自定义包装器,请告诉我!