当前位置: 首页 > 面试题库 >

从ng-options选择中过滤ng-options

杭英杰
2023-03-14
问题内容

我希望解决三个问题…

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

<select ng-model="filter.stateID" ng-options="item.stateID as item.state for item in st_option">
</select>

数据:

[
  { state="California", stateID="5"},
  { state="Arizona", stateID="3"},
  { state="Oregon", stateID="38"},
  { state="Texas", stateID="44"},
  { state="Utah", stateID="45"},
  { state="Nevada", stateID="29"}
]

对于我的县,请选择:

<select ng-model="filter.countyID" ng-options="item.countyID as item.county for item in co_option">
 </select>

数据:

[
  { county="Orange", countyID="191", co_state_id="5"},
  { county="Multiple Counties", countyID="3178", co_state_id="3"},
  { county="Sonoma", countyID="218", co_state_id="38"},
  { county="Los Angeles", countyID="190", co_state_id="44"}
]

这是我的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>

因此,如您所见,我stateID在州选择上使用,在县选择上使用,co_state_id在县数据集中已设置了相应的州ID 。

我想做几件事:

  1. 隐藏选择的县,直到选择了一个州。
  2. 选择州后,按选定的stateID/ 过滤县选择选项co_state_id
  3. 筛选ng-repeat由第一stateID,然后由countyID

我还没有看到一个方法来设置filter.stateIDtrue或过滤器由一个数字,而不是字符串。当我按stateID进行过滤时,会得到混合的结果,因为其中一些stateID可能包含“
1”。


问题答案:

通常,每个帖子您只想问一个问题,但是我会给这三个问题打个针。

第1部分 :添加ng-showfilter.stateID。由于无法取消选择状态,因此如果角度为^ 1.3,则可以使用一次绑定。

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

第2部分 :添加过滤器{co_state_id : filter.stateID}

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

第3部分

您正在使用模式对象作为过滤器,如果id的值为1则没关系:

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

工作片段

var app = angular.module('app', []);



app.controller('myController', function($scope) {

  $scope.projects = [{

    name: 'Project1',

    state: 'CA',

    stateID: '5',

    county: 'Orange',

    countyID: '191'

  }, {

    name: 'Project2',

    state: 'CA',

    stateID: '5',

    county: 'LosAngeles',

    countyID: '190'

  }, {

    name: 'Project3',

    state: 'CA',

    stateID: '5',

    county: 'Orange',

    countyID: '191'

  }, {

    name: 'Project4',

    state: 'MadeUp',

    stateID: '1',

    county: 'MadeUp',

    countyID: '190'

  }];



  $scope.st_option = [{

    state: "California",

    stateID: "5"

  }, {

    state: "Arizona",

    stateID: "3"

  }, {

    state: "Oregon",

    stateID: "38"

  }, {

    state: "Texas",

    stateID: "44"

  }, {

    state: "Utah",

    stateID: "45"

  }, {

    state: "Nevada",

    stateID: "29"

  }];



  $scope.co_option = [{

    county: "Orange",

    countyID: "191",

    co_state_id: "5"

  }, {

    county: "Multiple Counties",

    countyID: "3178",

    co_state_id: "3"

  }, {

    county: "Sonoma",

    countyID: "218",

    co_state_id: "38"

  }, {

    county: "Los Angeles",

    countyID: "190",

    co_state_id: "44"

  }];



  $scope.filter = {};

});


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>

<div ng-app='app' ng-controller='myController'>

  <select ng-model="filter.stateID"

          ng-options="item.stateID as item.state for item in st_option"></select>

  <select ng-show="::filter.stateID"

          ng-model="filter.countyID"

          ng-options="item.countyID as item.county for item in co_option | filter:{ co_state_id : filter.stateID }">

  </select>



  <div ng-repeat="project in projects | filter:filter">

    <div>

      <br>Name: {{ project.name }}

      <br>State: {{project.state}}

      <br>County: {{project.county}}

      <br>

      <span ng-hide="{{project.stateID}} "></span>

      <span ng-hide="{{project.countyID}} "></span>

    </div>

  </div>

</div>


 类似资料:
  • 问题内容: 我已经在其他帖子中阅读过,但是我无法弄清楚。 我有一个数组 我想将其呈现为: 我也想选择ID = 000002的选项。 我已经阅读了 select 并尝试过,但是我无法弄清楚。 问题答案: 要注意的一件事是ngOptions起作用 需要 ngModel。请注意,这是“将$ scope.blah设置为所选值”。 试试这个: 这里是AngularJS文档的更多内容(如果您还没有看过的话):

  • 问题内容: 在我的JavaScript中,我有一个数组 而且我正在尝试使选择器仅显示唯一的quoteNumbers即。ING-70440-21和ING-70440-01。但是,当我尝试在angular中使用’unique’选项时,没有任何显示。 没有唯一标签,它可以正常工作。我究竟做错了什么?我对angular非常陌生,所以它可能真的很简单。 问题答案: AngularJS没有内置过滤器。您可以执

  • 问题内容: 我有以下几点: 而这在我的HTML: 我该如何匹配类型并在每次出现时仅回显一次呢? 问题答案: 要删除重复项,可以使用AngularUI 的 唯一 过滤器(源代码在这里:AngularUI唯一过滤器),然后直接在ng-options(或ng- repeat)中使用它。 在这里查看更多: 独特的东西 json结构中也存在语法错误。 工作守则 HTML 脚本

  • 问题内容: 给定以下选择元素 有没有办法使MAGIC_THING等于当前选择的大小,因此我可以访问并在我的控制器中? size.code影响了应用程序的许多其他部分(图像网址等),但是当的ng-model 更新时,面向用户的东西也需要更新。我认为执行此操作的正确方法是捕获更改事件并在控制器内部设置值,但是我不确定可以将哪些内容传递给update以获取正确的值。 如果这是完全错误的解决方法,我很想知

  • 问题内容: 摆弄相关代码:http : //jsfiddle.net/gFCzV/7/ 我试图设置绑定到ng-repeat中引用的对象的子级集合的下拉列表的选定值。我不知道如何设置选定的选项,因为我无法以任何我知道的方式引用它所绑定的集合。 HTML : JS : 这是我实际上应该在模型上将ng-init与SelectedIndex一起使用的一种情况吗? 问题答案: 如果使用AngularJS 1

  • 问题内容: 我是Angular的新手,正在尝试ng-options。在我的控制器中,我有: 在我的模板中,我有: 根据视图,我想隐藏“读取”或“写入”。所以在我的控制器中,我还有另一个标志来指示它是什么视图。在使用ng- options之前,我有一个普通的select下拉列表,并做了如下操作: 有没有办法用ng-options做到这一点?谢谢。 问题答案: 您可以在ngOptions表达式中使用过