2016-02-13 1 views
1

J'ai une application AngularJS et j'essaie actuellement d'accéder à l'événement "search_expanded" du contrôle Leaflet Search mais sans avoir de chance.Angular Leaflet Rechercher événement de contrôle

Voici mon code:

angular.module('myApp', [ 'leaflet-directive' ]) 
     .controller('ShowMapCtrl', ["$scope", "leafletData", function ($scope, leafletData) { 
     // some code 
      leafletData.getMap().then(function(map) { 
         map.on('search_expanded', function(e){ 
          alert("search control expannded"); 
         }); 
        }); 
+0

essayer de faire .. '$ portée $ sur ('search_expanded', console.log)..' – Minato

+0

qui était ma première approche, mais il ne fonctionne pas – schizoskmrkxx

+0

'rootScope $ $ sur ('search_expanded' , console.log); '2ème approche? – Minato

Répondre

1

L'événement search_expanded, et tous les autres événements pris en charge par L.Control.Search sont tirés sur l'instance de contrôle effectif pas sur l'instance de carte comme vous pouvez le voir dans l'exemple suivant:

var controlSearch = new L.Control.Search({ 
    layer: new L.LayerGroup() 
}).on('search_expanded', function() { 
    console.log('search_expanded!') 
}).addTo(map); 

http://plnkr.co/edit/njeXYb4PfbaG3hppcgmO?p=preview

+0

oui mais le 'angular-leaflet-directive' a une manière différente de [mettre en œuvre le contrôle de recherche] (http://tombatossals.github.io/angular-leaflet-directive/examples/0000-viewer.html#/controls/ search-example) qui désactive la façon traditionnelle d'attraper des événements – schizoskmrkxx

+0

Je sais et suis désolé de dire qu'il est impossible de saisir l'instance de contrôle de recherche de 'leafletControlHelpers' car les contrôles ne sont pas stockés dans une propriété disponible publiquement. La seule solution qu'il vous reste est de saisir l'instance de carte dans votre contrôleur et d'y ajouter manuellement le contrôle. Je sais que ça craint. L'utilisation de cette directive présente de sérieux inconvénients, comme le gonflement et l'omission de la moitié de la fonctionnalité que vous pourriez obtenir en exécutant Leaflet simple avec votre propre directive et en mettant toute la logique dans votre contrôleur ou un service. Bonne chance. – iH8

+0

J'ai aussi cherché dans les aides. Pas étonnant que je ne trouve rien que je puisse utiliser pour obtenir l'événement. J'ai trouvé une solution de contournement cependant. C'est un peu bâclé mais ça fonctionne. – schizoskmrkxx

0

Tout d'abord, je voudrais essayer de jeter un peu de la gestion des exceptions là:

leafletData.getMap().then(function(map) { 
    map.on('search_expanded', function(e){ 
     alert("search control expannded"); 
    }, function(reason) { 
     alert('Failed: ' + reason); 
}); 

En outre, au lieu d'alerte, je préfère utiliser console.log() en particulier avec des applications angulaires.

leafletData.getMap().then(function(map) { 
    map.on('search_expanded', function(e){ 
     console.log("search control expannded"); 
    }, function(reason) { 
     console.log('Failed: ' + reason); 
}); 
+0

Merci, mais ce n'est pas la promesse qui a le problème. Il renvoie avec succès la promesse à chaque fois. Le problème est que je ne sais pas comment attraper l'événement "search_expanded" lorsqu'il est viré. – schizoskmrkxx

0

Je suis venu avec une solution de contournement bâclée depuis la directive ne me permettra pas d'attraper les événements de contrôle de recherche.

var expanded = false; 

$scope.$on('leafletDirectiveMap.layeradd', function(){ 

    $('input.search-input').focus(function(){ 

     expanded = !expanded; 

     if(expanded) 
     { 
      console.log("search control expanded"); 
     } 

    }); 
});