2013-01-03 4 views
0

J'essaie de placer des marqueurs sur une carte statique (non google) basée sur le code postal.
Ceci est mon code html:AngularJS - Filtre avec Mysql

<div ng-controller="DealerMarkerListCtrl"> 
    <a href="#/dealer/{{marker.id}}" class="marker" style="left:{{marker.left}}px;top:{{marker.top}}px" ng-repeat="marker in dealer|zipFilter:countryLookup"></a> 
</div> 

Maintenant, j'essaie d'afficher tous les marqueurs qui sont filtrés par le code postal et le pays, voici le menu déroulant:

<input type="text" name="plz" placeholder="PLZ (z.B 80469)" class="plz" ng-model="zipCodeLookup"> 
<select name="drop" tabindex="1" class="drop" id="dropcountry" ng-model="countryLookup" ng-options='option.value as option.name for option in typeOptions'> 
</select> 

Je suis le filtre suivant:

app.filter("zipFilter", function() { return function(markers, country, zip) { 
    var retMarkers = []; 
    for(var i = 0, len = markers.length; i < len; ++i) { 
     var singleMarker = markers[i]; 
     if(singleMarker.land == country) { 
      retMarkers.push(singleMarker); 
     } 
    } 
    return retMarkers; 
}}); 

Le principal problème est le suivant:
J'ai fait une recherche dans un cercle où j'obtiens tous les codes postaux à moins de 20 (km/miles) autour du code postal de l'utilisateur. Cela fonctionne bien. Je reçois un JSON comme ça, quand j'accéder directement au cadre (pas dans le contrôleur):

{"plz":["44787","44789","44791","44793","44795","44797","44799","44801","44803","44805","44807","44809","44866","44867","44869","44879","44892","44894","45525","45527","45529","45549"]} 

pour le code postal « 45525 ».

Maintenant, j'ai besoin d'afficher tous les marqueurs (concessionnaires) qui sont dans cette rangée de codes postaux.
Le paramètre zip avec le paramètre country dans le filtre doit être envoyé à la fonction "area search" "files/framework/umkreis /: zip /: country" pour obtenir le zip json de la zone.
Ensuite, j'ai besoin de vérifier si certains des marqueurs sont dans ce json et les filtrer.

Je ne sais pas, comment construire ce genre de choses dans mon filtre. Pouvez-vous m'aider à ce sujet? Merci beaucoup.

Autres informations utiles:
Route & Service:

app.factory('dealerService', ['$resource', '$http', '$rootScope', function($resource, $http, $rootScope){ 
    return { 
    //the resource provider interacting with the PHP backend 
     api: 
     $resource('files/framework/dealer/:id', {}, { 
      update: {method:'PUT'} 
     }), 
    } 
}]) 

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
     when('/dealer/:id', {templateUrl: 'files/tpl/dealer-details.html', controller: 'DealerDetailsCtrl'}). 
     otherwise({redirectTo: '/dealer'}); 
}]); 

La route vers le cadre "Slim" pour obtenir la zone-zipcodes est:

files/framework/umkreis/45525/DE 
or 
files/framework/umkreis/:zip/:country 
+0

J'ai maintenant créé une fonction php personnalisée, qui a comme paramètre le userZip et le pays. Il obtient la zone autour de la fermeture éclair donnée autour de 20 km. Après cela, je vérifie, si le zip du revendeur est dans le tableau des codes postaux de la zone. La sortie (en ce moment) sont les codes postaux du revendeur filtré. Voici la méthode: http://pastebin.com/pMf33c9j - Comment puis-je utiliser cette fonction, pour définir le marqueur? Je ne peux pas filtrer, c'est sûr ... non? – Marek123

Répondre

2

Il semble comme vous essayez de mettre à jour les marqueurs sur la carte en fonction de deux champs dans votre formulaire: "zipCodeLookup" et "countryLookup" .

<input ... ng-model="zipCodeLookup" ... /> 
<select ... ng-model="countryLookup" ... ></select> 

Les marqueurs sont affichés dans le contrôleur suivant:

<div ng-controller="DealerMarkerListCtrl"></div> 

Et vous utilisez cette voie pour recueillir les JSON de votre serveur PHP

files/framework/umkreis/:zip/:country 

Ce que vous devez faire est spécifier une fonction dans le "DealerMarkerListCtrl" contrôleur qui prendra un code postal et un pays, et mettre à jour les concessionnaires en utilisant le nouveau JSON du serveur.

$scope.updateDealer = function(zip, country) { 
    $http.get('files/framework/umkreis/'+ zip + '/' + country). 
    success(function(data) { 
     $scope.dealer = data; 
    }); 
} 

Une fois que vous avez cela, vous pouvez ajouter un ng-submit à l'<form> qui contient les entrées qui appelleront cette fonction,

<form ng-submit="updateDealer(zipCodeLookup, countryLookup)"> ... </form> 

Assurez-vous que le <form> est à l'intérieur du contrôleur correct pour voir la fonction nouvellement créée. Chaque fois que l'utilisateur soumet ce formulaire, il appelle votre serveur PHP, récupère le JSON et met à jour le tableau du dealer.

+0

Ouais! J'ai dû ajuster certaines choses mais ça a marché! Je vous remercie! – Marek123

Questions connexes