Angularjs过滤地图上的多个复选框

Angularjs过滤地图上的多个复选框,angularjs,checkbox,angularjs-filter,Angularjs,Checkbox,Angularjs Filter,我想根据项目中房间里的材料进行过滤。例如:如果选中“电视”复选框,则在电视上显示房间。如果选中tv和wifi复选框,只需列出同时具有tv和wifi功能的房间。我的示例显示的是电视房间,但当我按下wifi按钮时,带有电视的房间仍会列出,即使它不是wifi 这是: angular.module('hotelApp',[]) .controller('ContentControler',函数($scope,$timeout){ 变量映射选项={ 缩放:2, 中心:新google.maps.LatLn

我想根据项目中房间里的材料进行过滤。例如:如果选中“电视”复选框,则在电视上显示房间。如果选中tv和wifi复选框,只需列出同时具有tv和wifi功能的房间。我的示例显示的是电视房间,但当我按下wifi按钮时,带有电视的房间仍会列出,即使它不是wifi

这是:

angular.module('hotelApp',[])
.controller('ContentControler',函数($scope,$timeout){
变量映射选项={
缩放:2,
中心:新google.maps.LatLng(40.0000,-98.0000),
mapTypeId:google.maps.mapTypeId.TERRAIN
}
$scope.location_name=“”;
$scope.names=[{
道具名称:“位置1”,
拉脱维亚:43.7000,
长:-79.4000,
便利设施:“3”
}, {
道具名称:“位置2”,
拉脱维亚:40.6700,
长:-73.9400,
便利设施:“2”
}, {
道具名称:“位置3”,
纬度:41.8819,
长:-87.6278,
设施:“4”
}, {
道具名称:“位置4”,
拉脱维亚:34.0500,
长:-118.2500,
便利设施:“2”
}, {
道具名称:“位置5”,
拉脱维亚:36.0800,
长:-115.1522,
便利设施:“2,3”
}];
$scope.map=new google.maps.map(document.getElementById('map'),mapOptions);
$scope.markers=[];
var infoWindow=new google.maps.infoWindow();
var createMarker=函数(信息){
var marker=new google.maps.marker({
map:$scope.map,
位置:新google.maps.LatLng(info.lat,info.long),
标题:info.prop_Name
});
marker.content='
    '+'
  • '+info.prop_Desc+'
  • '+'
  • '+info.prop_Addr+'
  • '+
  • '+info.prop_Price+'
  • '+'
  • '+info.prop_Dist+'
  • '+'
'; google.maps.event.addListener(标记,'click',函数(){ infoWindow.setContent(“”+marker.title+“”+marker.content); infoWindow.open($scope.map,marker); }); $scope.markers.push(marker); } 对于(i=0;i<$scope.names.length;i++){ createMarker($scope.names[i]); } $scope.openInfoWindow=函数(e,selectedMarker){ e、 预防默认值(); google.maps.event.trigger(selectedMarker,'click'); } //问题过滤器在这里 $scope.am_en=函数() { x=$(“.hosting\u便利设施输入:复选框:选中”).map(函数(){return$(this.val();}).get(); $scope.ot_Filter=函数(位置){ var shouldBeShown=false; 对于(变量i=0;i
#地图{
高度:220px;
宽度:400px;
}
.infoWindowContent{
字体大小:14px!重要;
边框顶部:1px实心#ccc;
填充顶部:10px;
}
氢{
页边距底部:0;
边际上限:0;
}
#项目总数
{
保证金:0px自动;
填充:0px;
文本对齐:居中;
颜色:#0B173B;
边缘顶部:50px;
边框:2个虚线#013ADF;
字体大小:20px;
宽度:200px;
高度:50px;
线高:50px;
字体大小:粗体;
}
#数量
{
颜色:#DF7401;
字号:18px;
字体大小:粗体;
}
#滑块范围
{
保证金:0px自动;
填充:0px;
文本对齐:居中;
宽度:500px;
}

  • {{x.prop_Name}
过滤器: 无线网络 电视 有线电视 克里马 提交
您仅检查某项内容是否已检查,然后将
shouldBeShown
设置为true和break。所以你用复选框勾选“或”而不是“和”

请参见您的
$scope.am\u en=function()

for(变量i=0;i
您需要修改if语句以选中所有选中的复选框/筛选器。也许你可以考虑使用二进制信息来提供便利

例如:

  • 00=不舒适
  • 01=仅限WiFi
  • 10=仅限电视
  • 11=电视和WiFi
然后您可以存储:

  • 白费
  • 1只适用于WiFi
  • 2只适合看电视
  • 3用于电视和Wifi

这将使检查更容易,因为您可以使用模运算符。

在当前脚本中,当您选择两个元素(如电视和WiFi)时,您将显示具有电视或WiFi的房间。您应该更改代码,以便仅选择有TVWiFi的房间,因此您的内部功能
$scope.ot\u过滤器将如下所示:

$scope.ot_Filter = function (location) {
    var shouldBeShown = true;
    for (var i = 0; i < x.length; i++) {
        if (location.amenities.indexOf(x[i]) === -1) {
            shouldBeShown = false;
            break;
        }
    }
    return shouldBeShown;
};
$scope.ot_Filter=函数(位置){
var shouldBeShown=真;
对于(变量i=0;i

我修改了您的脚本,将WiFi添加到某个位置,

程序完成时出现了最后一个问题。如何避免在首次加载页面时进行过滤。例如:打开选中电视的页面?问题链接:
$scope.ot_Filter = function (location) {
    var shouldBeShown = true;
    for (var i = 0; i < x.length; i++) {
        if (location.amenities.indexOf(x[i]) === -1) {
            shouldBeShown = false;
            break;
        }
    }
    return shouldBeShown;
};