So habe ich herumgespielt mit dem Versprechen, in einem Service vs in einem Controller zu lösen. Ich würde es lieber im Service auflösen, damit ich die Variable wiederverwenden kann, ohne sie mehrfach auflösen zu müssen.Lösen eines Versprechens in einem Service/Fabrik vs in einem Controller mit AngularJS
Das Problem, das ich habe, ist, dass es funktioniert, aber es gibt die Daten sehr sehr langsam zurück. Ich fühle mich, als würde ich hier etwas falsch machen. Es dauert ungefähr 5 oder 6 Sekunden, bis meine ng-Optionen gefüllt sind. Welches ist besser? Und wie kann ich meinen Code verbessern, damit er schneller läuft?
In Service Entschlossen:
resortModule.factory('locaService',['$http', '$rootScope', function ($http, $rootScope){
locaService.getLocations=
function() {
return $http.get('/api/destinations').then(
function(result){
locaService.locations= result.data;
return locaService.locations;
}
);
return locaService.locations;
};
resortModule.controller('queryController',['$scope', 'locaService', function($scope, locaService) {
$scope.getLocations= locaService.getLocations().then(function(result){
$scope.locations= result;
});
}]);
in Controller-Entschlossen:
resortModule.factory('locaService',['$http', '$rootScope', function ($http, $rootScope){
locaService.getLocations=
function() {
locaService.locations= $http.get('/api/destinations');
//stores variable for later use
return locaService.locations;
};
}]);
resortModule.controller('queryController',['$scope', 'locaService',
function($scope, locaService) {
locaService.getLocations()
.then(
function(locations) // $http returned a successful result
{$scope.locations = locations;} //set locations to returned data
,function(err){console.log(err)});
}]);
HTML:
<select ng-click="selectCheck(); hideStyle={display:'none'}" name="destination" ng-style="validStyle" ng-change="getResorts(userLocation); redirect(userLocation)" class="g-input" id="location" ng-model="userLocation">
<option value=''>Select Location</option>
<option value='/destinations'>All</option>
<option value="{{loca.id}}" ng-repeat="loca in locations | orderBy: 'name'">{{loca.name}}</option>
</select>
[Caching das Versprechen] (http://stackoverflow.com/a/18745499/1048572) ist viel einfacher als den Wert zwischenspeichern. – Bergi
@Bergi danke für den Link. – allienx