角度单张搜索控制事件

问题描述:

我有一个AngularJS应用程序,我目前正试图访问Leaflet Search控件的“search_expanded”事件,但没有运气。角度单张搜索控制事件

这里是我的代码:

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

尝试做..'$范围在$( 'search_expanded',执行console.log);' – Minato

+0

这是我的第一种方法,但它没有工作 – schizoskmrkxx

+0

'$ rootScope在$( 'search_expanded' ,console.log);'第二种方法? – Minato

search_expanded事件,并全部由L.Control.Search支持的其他事件的实际控制实例触发未在地图上的实例,你可以在下面的例子中看到:

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

是的,但'angular-leaflet-directive'有不同的[实现搜索控制]的方式(http://tombatossals.github.io/angular-leaflet-directive/examples/0000-viewer.html#/controls/搜索示例),它禁止从事传统捕捉事件的方式 – schizoskmrkxx

+0

我知道并且很抱歉地说,afaik没有办法从'leafletControlHelpers'抓取搜索控件实例,因为这些控件没有存储在公共可用属性中。所以你唯一的解决方案就是在你的控制器中抓取地图实例并手动添加控件。我知道这很糟糕。使用这个指令具有严重的缺点,例如它膨胀并留下一半的功能,当你用自己的指令运行普通的Leaflet并将所有的逻辑放在你的控制器或服务中时,你可能会得到一半的功能。祝你好运。 – iH8

+0

我也一直在寻找帮手。难怪我找不到任何可以用来举办活动的东西。尽管我找到了解决方法。这是一种马虎,但它的作品。 – schizoskmrkxx

首先,我会尝试抛出一些异常处理中有:

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

此外,而不是警报,我更喜欢使用的console.log()特别是在Angular应用程序中。

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

谢谢,但这不是承诺有问题。它每次都成功地返回诺言。问题在于,我不知道如何在触发时捕获“search_expanded”事件。 – schizoskmrkxx

我想出了一个马虎的解决方法,因为该指令不会让我抓住搜索控制事件。

var expanded = false; 

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

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

     expanded = !expanded; 

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

    }); 
});