Angularjs 从ng选项选择中筛选ng选项

Angularjs 从ng选项选择中筛选ng选项,angularjs,angularjs-ng-repeat,ng-options,angularjs-ng-options,Angularjs,Angularjs Ng Repeat,Ng Options,Angularjs Ng Options,我希望解决三个问题 在我的应用程序页面中,我有一个选择用于州,另一个选择用于县。对于国家,我有: <select ng-model="filter.stateID" ng-options="item.stateID as item.state for item in st_option"> </select> 对于我的县选择,我有: <select ng-model="filter.countyID" ng-options="item.countyID as it

我希望解决三个问题

在我的应用程序页面中,我有一个选择用于州,另一个选择用于县。对于国家,我有:

<select ng-model="filter.stateID" ng-options="item.stateID as item.state for item in st_option">
</select>
对于我的县选择,我有:

<select ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option">
 </select>
这是我的
ng repeat

<div ng-repeat="project in projects | filter:filter">
    <div>
        State: {{project.state}}<br> 
        County: {{project.county}}<br>
        <span ng-hide="{{project.stateID}}"></span>
        <span ng-hide="{{project.countyID}}"></span>
    </div>
</div>

状态:{{project.State}}
县:{{project.country}}
因此,正如您所看到的,我在州选择中使用了
stateID
,在县选择中,我在县数据集中的
co_state_id
中设置了相应的州id

我想做几件事:

  • 隐藏县选择,直到选择一个州
  • 选择州后,根据所选的
    stateID
    /
    co\u state\u id
  • 首先按
    stateID
    过滤
    ng repeat
    ,然后按
    countyID
    过滤

  • 我还没有找到将
    filter.stateID
    设置为
    true
    的方法,也没有找到通过数字而不是字符串进行过滤的方法。当我按stateID筛选时,我得到的结果是混合的,因为一些
    stateID
    中可能有“1”..

    通常每个帖子你只想问一个问题,但我会尝试一下这三个问题

    第1部分:为
    过滤器.stateID
    添加一个
    ng show
    。由于无法取消选择状态,如果角度为^1.3,则可以使用一次性绑定

    <select ng-show="::filter.stateID" ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option">
    
    第三部分:

    您正在为过滤器使用pattern对象,如果id的值为1,则无所谓:

    对象:模式对象可用于过滤数组包含的对象的特定属性。例如{name:“M”,phone:“1”}谓词将返回一个项目数组,其中属性名称包含“M”,属性phone包含“1”。可以使用特殊属性名$(如{$:“text”})来接受与对象的任何属性或其嵌套对象属性的匹配。这相当于上面描述的简单子字符串与字符串匹配。谓词可以通过在字符串前面加上!。例如{name:“!M”}谓词将返回属性名不包含“M”的项数组

    工作片段

    var-app=angular.module('app',[]);
    app.controller('myController',函数($scope){
    $scope.projects=[{
    名称:“项目1”,
    声明:“CA”,
    stateID:'5',
    县:“橙色”,
    countyID:'191'
    }, {
    名称:“项目2”,
    声明:“CA”,
    stateID:'5',
    县:'洛杉矶',
    countyID:'190'
    }, {
    名称:“项目3”,
    声明:“CA”,
    stateID:'5',
    县:“橙色”,
    countyID:'191'
    }, {
    名称:“项目4”,
    声明:“MadeUp”,
    stateID:'1',
    县:'马德普',
    countyID:'190'
    }];
    $scope.st_选项=[{
    州:“加利福尼亚”,
    国家编号:“5”
    }, {
    州:“亚利桑那州”,
    国家编号:“3”
    }, {
    州:“俄勒冈州”,
    国家编号:“38”
    }, {
    州:“德克萨斯州”,
    国家编号:“44”
    }, {
    州:“犹他州”,
    国家编号:“45”
    }, {
    州:“内华达州”,
    国家编号:“29”
    }];
    $scope.co_选项=[{
    县:“橙色”,
    countyID:“191”,
    co_州id:“5”
    }, {
    县:“多个县”,
    countyID:“3178”,
    co_州id:“3”
    }, {
    县:“索诺玛”,
    countyID:“218”,
    co_州id:“38”
    }, {
    郡:“洛杉矶”,
    countyID:“190”,
    co_州id:“44”
    }];
    $scope.filter={};
    });
    
    
    
    名称:{{project.Name}
    状态:{{project.State}
    县:{{project.country}

    add fiddle或plunkr plessehi@pankajparkar,请参阅下面的DTing解决方案,这里有一个运行代码片段的链接。稍后我会尝试使用plunker,但我有一个atm计划,需要推进..谢谢DTing,在我检查答案之前,我仍在测试您的解决方案,但我认为这已经让我非常接近了。我仍然有点奇怪-比如我可以选择“阿拉巴马”,它应该会给出一个结果,但它显示了来自路易斯安那州、爱达荷州和夏威夷的300个结果。。。大多数其他状态都在完美地过滤结果,只有少数状态不起作用,因此我仍在尝试找出我在控制器或数据中是否做得不对。我还使用parseInt()..@webmaster_-sean将我的ID转换为数字而不是字符串,除非你将代码发布到某个地方(或者更好的是发布一个新问题),否则我真的帮不了你。祝你好运经过更多的测试后,我将检查您的解决方案作为答案,因为它确实解决了第1部分和第2部分-第3部分是我仍在努力解决的一些问题。。也许在另一个问题上,当我能更清楚地知道问题是什么的时候。为了将来的参考,我将尝试发布只包含一部分的问题;-)
    <select ng-show="::filter.stateID != null" ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }">