0

我尝试根据邮政编码在静态(非谷歌)地图上设置标记。
这是我的html代码:

<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>  

现在我尝试显示按邮政编码和国家/地区过滤的所有标记,这是下拉列表:

<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>

我得到了以下过滤器:

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;
}});

主要问题是:
我得到了一个外接环搜索,我得到了用户邮政编码周围 20(公里/英里)内的所有邮政编码。这工作正常。当我直接访问框架(不在控制器内)时,我得到一个这样的 json:

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

对于邮政编码“45525”。

现在我需要显示这个邮政编码数组中的所有标记(经销商)。
需要将过滤器中的 zip 参数和 country 参数一起发送到“区域搜索”功能“files/framework/umkreis/:zip/:country”以获取该区域的 zip json。
之后我需要检查一些标记是否在这个 json 中并过滤它们。

我只是不知道,如何将这些东西构建到我的过滤器中。你能帮我解决这个问题吗?非常感谢。

其他有用信息:
路线和服务:

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'});
}]); 

获取区域邮政编码的“Slim”框架的路径是:

files/framework/umkreis/45525/DE
or
files/framework/umkreis/:zip/:country
4

1 回答 1

2

您似乎正在尝试根据表单中的两个字段更新地图上的标记:“zipCodeLookup”和“countryLookup”。

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

标记显示在以下控制器中:

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

你正在使用这条路线从你的 PHP 服务器收集 JSON

files/framework/umkreis/:zip/:country

您需要做的是在“DealerMarkerListCtrl”控制器中指定一个函数,该函数将采用邮政编码和国家/地区,并使用来自服务器的新 JSON 更新经销商。

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

有了这个之后,您可以添加一个包含将调用此函数的输入的ng-submit<form>

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

确保它<form>位于正确的控制器内部以查看新创建的函数。每当用户提交此表单时,它将调用您的 PHP 服务器,获取 JSON,并更新经销商数组。

于 2013-01-04T20:04:14.490 回答