1.- Es ist eine einfache ng-route
Setup, ich habe 3 Tasten, jeder Knopf navigiert zu einem neuen Pfad.SignalR nicht aktualisieren ng-view nach dem Ändern der Seite
2.- Ich habe eine übergeordnete Steuerung und ein Kind Controller für ng-view
3.- Für ng-view
ich eine Vorlage mit einer Spannweite von Eigentum subCtrl.id
und einer anderen Spanne 'subCtrl.something'
mit einem Anfangswert von something.id=1
gebunden gebunden habe und something.name='blondie'
4.-Wenn ich die signalR Methode durch Fiddler nennen und ich bin an der intitial Route funktioniert alles einwandfrei: signalR aktualisiert die Ansicht mit 'Angel Eyes'
PROBLEM: ABER Wenn ich die Route ändern und ctrl.optionSelected (2) oder ctrl.optionSelected (3) aufrufen und SignalR-Methode über FIDDLER aufrufen, erhält der Client es und die Konsole druckt 'Angel Eyes', ABER die Ansicht ist Nicht aktualisiert!
HTML
<div ng-app="app">
<div ng-controller="mainCtrl as ctrl">
<button ng-click="ctrl.optionSelected(1)">1</button>
<button ng-click="ctrl.optionSelected(2)">2</button>
<button ng-click="ctrl.optionSelected(3)">3</button>
<div ng-view></div>
</div>
<script type="text/javascript" src="~/Scripts/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="~/Scripts/angular.min.js"></script>
<script type="text/javascript" src="~/Scripts/angular-animate.min.js"></script>
<script type="text/javascript" src="~/Scripts/angular-route.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script type="text/javascript" src="~/signalr/hubs"></script>
<script type="text/javascript" src="~/Scripts/app.js"></script>
JAVASCRIPT
var app = angular.module('app', ['ngRoute']);
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/:id', {
templateUrl: '/Templates/template.html',
controller: 'subCtrl',
controllerAs: 'sctrl'
});
}]);
app.controller('mainCtrl', ['$location', function ($location) {
var self = this;
self.optionSelected = function (option) {
$location.path("/" + option);
};
}]);
app.controller('subCtrl', ['$routeParams', '$scope', function ($routeParams, $scope) {
var self = this;
self.something= {};
self.something.id = $routeParams.id;
self.something.name = 'Blondie';
self.hub = $.connection.AppHub;
/*****HERE IS THE PROBLEM*************/
self.hub.client.Hello = function() {
console.log("Angel eyes");
self.something.name= 'Angel eyes';
$scope.$apply();
};
/*************************************/
$.connection.hub.start().done(function() {
console.log('SignalR connection started');
});
}]);
Vorlagen/template.html
<span ng-bind="sctrl.something.id"></span>
<span ng-bind="sctrl.something.name"></span>
SIGNAL R Methode:
[HttpGet]
[Route("api/app/GetSignalRTest")]
public IHttpActionResult GetSignalRTest()
{
var context = GlobalHost.ConnectionManager.GetHubContext<AppHub>();
context.Clients.All.hello();
return Ok();
}
Der Code und die Erklärung scheint zu lang zu sein, aber es ist eigentlich sehr einfach, benutzen Sie bitte die folgenden Gifs
Arbeiten mit Anfangsroute sehen:
Funktioniert nicht nach dem Ändern der Ansicht:
Was mache ich hier falsch?
AngularJS und SignalR sind zwei libries. Sobald die Änderungen am SignalR-Hub-Ende geschehen, wird nicht automatisch nach dem Winkel ausgewählt. Angular kennt keine Hub-Updates. – user3484630
Wir müssen müssen alle AngularJS Ereignisse nach dem Hub Änderungen – user3484630