Haben zwei Probleme. Ich versuche, einen Wert von einer $ HTTP-Antwort zu erhalten und eine Variable damit zu füllen, die dann einige DOM-Objekte aktualisieren sollte. Problem ist, dass es scheint, ein Timing-Problem zu haben, wo die Funktion, die den $ http-Service aufgerufen hat, vervollständigt wird, und dann wird die Variable aktualisiert, aber scheint nicht überall zu aktualisieren, wo es sollte. Ich habe auch versucht, die Variable zu überwachen, und sie scheint nur dann ausgelöst zu werden, wenn die Seite geladen wird. Ich habe den ganzen Tag alles gelesen und finde keine Antwort, die funktioniert.
app.controller('MainCtrl', ['$scope', '$http', 'waciServ', function($scope, $http, waciServ) {
"use strict";
$scope.currentSource = waciServ.activeSource;
$scope.$watch('waciServ.activeSource', function(newValue, oldValue) {
$scope.currentSource = newValue;
console.log('Watcher! ' + newValue);
}/*, true*/);
$scope.getActiveSource = function() {
$scope.currentSource = waciServ.getStringByName("active_device");
};
}]);
app.service('waciServ', function($http) {
var self = this;
this.waciIP = location.host;
this.activeSource = '';
this.getStringByName = function (name) {
$http.post("http://" + self.waciIP + "/rpc/", "method=GetVariableByName¶m1=" + name + "&encoding=2")
.then (function (response) {
var was_error = self.read(response.data);
if (was_error == '1') { //active_device is not set
self.assignVariable(name, "none");
self.activeSource = "none";
return self.activeSource;
} else {
var varId = parseInt(self.read(response.data));
$http.post("http://" + self.waciIP + "/rpc/", "method=GetVariableValue¶m1=" + varId + "&encoding=2")
.then (function (response) {
self.activeSource = self.read(response.data);
return self.activeSource;
});
}
}, function (error) {
console.log("error: " + error.data);
});
};
});
i eine console.log rechts vor der Rückkehr Feuer platzieren kann und sehen, dass ich habe, was ich will, aber eine andere console.log in der Funktion in der Steuerung zeigt ‚undefiniert‘ gesetzt.
Was gibt? Vielen Dank im Voraus.