2016-11-28 2 views
0

Ich habe einen Service gemacht und ich bekomme die Daten, aber es gibt keine Sache zum Controller zurück.Angular Js - Warum bekomme ich Unfied in Controller, während ich Daten aus dem Service bekomme?

Mein Service. js

app.factory('countryService', function ($http) { 
    return { 
     getCountries: function() { 
      $http.get('http://abc/countries') 
        .success(function (data) { 
         console.log(data); 
        }) 
        .error(function (data) { 
         console.log(data); 
        }); 
     } 
    }; 
}); 

Datei und hier ist mein Controller

$scope.countries = function() { 
      $scope.countries_data = countryService.getCountries(); 
      console.log($scope.countries_data); 
     }; 

Was ist mein Fehler?

+0

Versuchen Sie, eine 'return' Anweisung. Weitere Informationen finden Sie unter [MDN-JavaScript-Referenz - Rückgabeanweisung] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return). – georgeawg

+0

@georgeawg nur 'return' würde nicht funktionieren, da' .success' & '.error' function auf' $ http.get' angewendet wurden, wird es die Verkettung von Versprechen unterbrechen, OP muss '.success' &' entfernen. error' function (auch hier machen sie nichts besonderes) –

Antwort

4

Möglicherweise müssen einige strukturelle Änderungen tun wie folgt

app.factory('countryService', function ($http) { 
    return { 
     getCountries: function() { 
      return $http.get('http://abc/countries'); //just return promise 
     } 
    }; 
}); 

Let Service geben die promise, tun andere Verfahren in der Steuerung, definieren Erfolg Rückruf und faiure Rückruf für die gleiche

$scope.countries = function() { 
    $scope.countries_data = countryService.getCountries().then(success, failure); // callbaks 
}; 

function success(response){ 
    console.log(response); // logs the results 
} 

function failure(response){ 
    console.log(response); // logs the errors if any 
} 

Hoffe, das wird helfen

+0

Warum empfehlen Sie '$ q' zu verwenden, würde es als schlechtes Muster angesehen werden .. –

+0

@PankajParkar Warum ist es schlecht? Ist es nicht gut zu benutzen? –

+1

'$ http' Methoden gibt Versprechen Objekt selbst, so dass es keine Notwendigkeit, Ihre eigenen benutzerdefinierten Versprechen mit '$ q', das wäre ein Overhead dann würde ich Ihnen empfehlen, zum Auschecken [diese Antwort] (http: //stackoverflow.com/a/30757201/2435473), es sei denn, Sie haben ein spezielles Szenario. Es lohnt sich, ein verzögertes Muster zu vermeiden. –

0

In Ihrem Service:

app.factory('countryService', function ($http) { 
    return { 
     getCountries: function() { 
      return $http.get('http://abc/countries') // add return this service 
        .success(function (data) { 
         console.log(data); 
        }) 
        .error(function (data) { 
         console.log(data); 
        }); 
     } 
    }; 
}); 

In Controller:

$scope.countries = function() { 
      countryService.getCountries().then(function(res){ 
$scope.countries_data = res; 
    console.log($scope.countries_data); 
}); 

     }; 
Verwandte Themen