【问题标题】:Incorrect filtering the list created via ng-repeat (AngularJS)过滤通过 ng-repeat (AngularJS) 创建的列表不正确
【发布时间】:2015-07-03 20:56:45
【问题描述】:

我有一个包含地区的数组和包含每个城市的数组。我已经通过 bg-repeat 创建了列表:

 <div ng-repeat="district in districts | filter:search:startsWith" class="district">

      <h4 class="district-name">{{ district.district }}</h4>
      <a href="{{ district.link }}">Some info</a>

      <ul class="district-cities">

        <li ng-repeat="city in district.cities">
          {{ city }}
        </li>

      </ul>


    </div>

当我们点击区域开始的字母时一切正常,但是当我们点击某个字母时,那不是地区的第一个字母,但同时它存在于一个城市中,那么过滤工作不正确。

这里正在工作Plnkr。当您尝试单击字母A, B or G 时,一切都很好,但是一旦您单击字母Z,就会出现两个不是以字母Z 开头的地区,而是包含包含字母Z 的城市。

抱歉,这可能是一个基本问题,但是如何解决这个问题?

【问题讨论】:

    标签: angularjs angularjs-ng-repeat filtering ng-repeat


    【解决方案1】:

    试试这个:

        <input id="q" type="text" ng-model="search.district " />
    

    <ul search-list=".letter" model="search.district">
        <li class="letter" ng-repeat="letter in alphabet.letter">{{ letter }}</li>
    </ul>
    

    这意味着过滤器仅作用于您对象的区域属性。否则 Angular 会查看所有属性。

    更新:

    对于您的第二个列表,您需要使用 search.district 作为主要搜索项,如下所示:

    <div ng-repeat="district in districts | filter:search.district:startsWith" class="district">
    

    我更新了 Plunk 以包含第二个蓝色列表,像这样搜索。

    【讨论】:

    • 先生,感谢您的帮助,但仍然无法使用...在您的 Plnkr 上尝试单击“Z”
    • 糟糕,抱歉,我更新了搜索框功能,但没有更新字母数组。我已经编辑了答案并更新了 Plunkr。
    • 完美运行,绝对是这个问题的答案!我会接受的。但是一开始如果你不介意我可以再问你一个问题吗?如果我有两个列表的一个搜索输入......一个列表包含所有地区的所有城市......另一个列表包含城市的地区列表(如上面的示例)。在这种情况下我该怎么办?如果我应用您的方法,这对于第二个列表将非常有用,但第一个将不再起作用...
    • 我已经更新了主要答案和 Plunk 来满足这个要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多