2016-06-22 5 views
0

ich meine Daten Fabrik unten haben, die ein Versprechen gibtProbleme mit Zwei-Wege-Datenbindung zwischen Service und Controller

.factory('DataService', function($http, $document, CreatorService) { 
    promise = null; 
    jsonData = null; 

     return { 
      getJsonDataFromApi: function() { 
        promise = $http.get('/test'); 
        return promise; 
       } 
      } 
      getJsonData: function() { 
       return jsonData; 
      }, 
      setJsonData: function (data) { 
       jsonData = data; 
      } 
    } 

Mein Controller Nutzung dieses Dienstes macht als

.controller('MainCtrl', function ($scope, $http, $uibModal, DataService, StyleService, CreatorService) { 

$scope.dataService = DataService; 

$scope.dataService.getJsonDataFromApi().success(function (data) { 
    $scope.dataService.setJsonData(data['content']); 
    $scope.jsonData = $scope.dataService.getJsonData(); 

Wie folgt können Sie Ich versuche, $scope.jsonData an den Datendienst jsonData Objekt über $scope.jsonData = $scope.dataService.getJsonData(); zu binden, aber das scheint nicht zu funktionieren. Wenn ich den Wert von $scope.jsonData() aktualisiere, ändert sich der Wert, der von $scope.dataService.getJsonData() zurückgegeben wird, nicht.

Zum Beispiel, wenn ich

$scope.jsonData = {}; 

    console.log($scope.jsonData); 
    console.log($scope.dataService.getJsonData()); 

Der Ausgang ist

{} 
Object{...} 

ich sie gleich sein erwartet hätte. Ich kann nicht scheinen, mein Service-Objekt zu aktualisieren, wenn ich mein Controller-Bereichsobjekt ändere, noch kann ich mein Controller-Bereichsobjekt aktualisieren, wenn ich das Dienstobjekt ändere. Ich möchte vermeiden, Uhren zu benutzen.

+0

Von wo Sie Controller-Funktion aufrufen? – Ajay

Antwort

1

Zwei-Wege-Datenbindung ist für die Zusammenarbeit mit $scope und Ansichten zu binden. Nicht für Controller und Dienste. Also, wenn Sie wirklich so etwas brauchen, dann müssen Sie $watch und setzen Sie die Daten in Dienst jedes Mal, wenn es sich ändert.

+0

Müsste ich zwei Überwachungsfunktionen einrichten: eine Überwachung auf Änderungen des Bereichsobjekts, das dann das Dienstobjekt aktualisiert, und eine weitere Überwachung des Dienstobjekts, das das Bereichsobjekt aktualisiert? – Flame1845

+0

Wenn Sie dies tun, um Ihr Ergebnis für das Caching, dann können Sie Ihre Daten in Ihrem 'getJsonDataFromApi' Verfahren eingestellt, nachdem das Versprechen löst wie:.' $ Http.get ('/ test') dann (function (successResponse) {jsonData = successResponse}; ' jetzt können Sie eine' if' Anweisung in Ihrem 'getJsonDataFromApi' Methode hinzu:' if (jsonData) jsonData' zurückkehren So, jetzt können Sie 'getJsonDataFromApi' Methode aufrufen, wie viel Sie wollen, wird es die Anfrage ausgelöst. Zeit ein. – yogurt

+0

Wenn Ihr Grund nicht zwischenspeichert, erklären, warum Sie es brauchen, und ich werde versuchen, einen „Winkel-Weg“ zu finden, sie zu erreichen. – yogurt

Verwandte Themen