Javascript 集成AngularJS+;传单
我正在使用AngularJS和传单构建一个Web应用程序。我已经试过了,但是这会使webapp太慢,没有响应(我有+2000个点和许多复杂的多边形) 我使用$http.get将多边形的GeoJSON加载到传单中,并将相同的数据绑定到Angular中。GeoJSON特性的属性填充一个表,我通过多边形ID(也是一个feature.property)过滤该表,如下所示:Javascript 集成AngularJS+;传单,javascript,angularjs,leaflet,geojson,angular-leaflet-directive,Javascript,Angularjs,Leaflet,Geojson,Angular Leaflet Directive,我正在使用AngularJS和传单构建一个Web应用程序。我已经试过了,但是这会使webapp太慢,没有响应(我有+2000个点和许多复杂的多边形) 我使用$http.get将多边形的GeoJSON加载到传单中,并将相同的数据绑定到Angular中。GeoJSON特性的属性填充一个表,我通过多边形ID(也是一个feature.property)过滤该表,如下所示: <div ng-repeat="bcd in nycd.features | filter: {properties.boro
<div ng-repeat="bcd in nycd.features | filter: {properties.borocd: last_clicked} ">
<div>{{ bcd.properties.borocd }}</div>
</div>
但是,当我单击映射时,我的
$scope.last_clicked
变量会更新,但ng repeat
的过滤器不会更新。我已经用
测试过过滤ng repeat
,它可以工作,但在点击传单地图时仍然没有任何效果。有什么想法吗?解决方案是使用charlietfl在评论中指出的$scope.$apply()
更新原始问题中的代码:
...
mapApp.nycd = L.geoJson($scope.nycd, {
onEachFeature: function (feature, layer) {
layer.on('click', function(e) {
$scope.last_clicked = feature.properties.borocd; //change ID with map click
$scope.$apply(); //this updates the filter
});
...
我不确定我是否完全理解为什么它以前没有自动更新,但这可能会有所帮助。事件不在angular上下文范围内,所以您需要在修改范围时告诉angular运行摘要。。。试试
$scope.$apply()
@charlietfl,你说得对!谢谢我已经在下面回答了。
...
mapApp.nycd = L.geoJson($scope.nycd, {
onEachFeature: function (feature, layer) {
layer.on('click', function(e) {
$scope.last_clicked = feature.properties.borocd; //change ID with map click
$scope.$apply(); //this updates the filter
});
...