Ich habe eine Fabrik, die Daten vom Server abruft und an die Controller übergibt, rufen viele Controller Methoden ab der Fabrik abrufen, aber nur die Scope-Variable des Controllers, der die Fabrik zuerst anruft im Hinblick geändert nicht alles ... hier ist mein Werk CodeAnsicht nicht update in angularjs nach einer Zusage ist gelöst
(function() {
angular.module('myapp').factory('agendaFactory', ['$http', '$q', function ($http, $q) {
var user = "";
var defer = $q.defer();
var agenda = {
getAll: function (tempData, addType) {
$http.post('/api/' + addType + '/getAll', tempData).success(function (data, status) {
console.log(addType, data);
//console.log(status);
defer.resolve(data);
}).error(function (err, status) {
console.log(err, status);
defer.reject(status);
});
return defer.promise;
}
};
return agenda;
}]);
}());
hier sind die beiden Controller sie anrufen ..
changeData = function (data) {
console.log("called function in liffe");
$scope.lifetimeData = data;
}
agendaFactory.getAll(tempData, addType).then(function (data) {
console.log('lifeData', data);
changeData(data);
return;
}, function (err) {
console.log('today err', err);
})
und zweiten Controller
changeData = function (data) {
console.log("called function in year");
$scope.yearData = data;
}
agendaFactory.getAll(tempData, addType).then(function (data) {
console.log('yeardata', data);
changeData(data);
return;
}, function (err) {
console.log('today err', err);
});
aber Daten von nur ersten Controller
'$ http' Funktionen geben bereits ein Versprechen, keine Notwendigkeit, wickeln Sie sie in ein Versprechen behandeln. Auch 'success' und' error' sind veraltet, benutzen Sie 'then'. Und schließlich, könnten Sie eine Plunkr/Fiedle zur Verfügung stellen, die das Problem demonstriert? –
@NexusDuck das ist ein Ausschnitt aus einer großen App, Wiedergabe wäre es sehr schwierig, wie Sie vorgeschlagen, ich sollte nur $ http Versprechen verwenden, so können Sie bitte eine Antwort schreiben, so dass ich es ausprobieren kann, THanks –
wird es nicht helfen Sie, Ihr Problem zu lösen, werden Sie einfach das veraltete Zeug los. Siehe [this] (https://docs.angularjs.org/api/ng/service/$http#deprecation-notice) für weitere Informationen. Außerdem sollten Sie in der Lage sein, nur ein [minimales Arbeitsbeispiel] (http://stackoverflow.com/help/mcve) zu reproduzieren, keine Notwendigkeit, die ganze App zu reproduzieren. –