2016-07-10 39 views
1

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

+0

'$ 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? –

+0

@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 –

+0

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. –

Antwort

0

in der Ansicht aktualisiert werden, um die Versprechen Wrapper entfernen, da $http bereits ein Versprechen zurück. Entfernen Sie auch die Erfolgs-/Fehlerhandler, da sie veraltet sind.

(function() { 
angular.module('myapp').factory('agendaFactory', ['$http', '$q', function ($http, $q) { 
    var user = ""; 
    var agenda = { 
     getAll: function (tempData, addType) { 
      return $http.post('/api/' + addType + '/getAll', tempData); 
     } 
    }; 
    return agenda; 
}]); 
}()); 

Sie können dann die Erfolgs-/Fehlerbedingungen in Ihrem Controller