【问题标题】:Filtering a scope with multiple select in AngularJS在AngularJS中使用多选过滤范围
【发布时间】:2013-04-23 09:57:28
【问题描述】:


这是我的小提琴:http://jsfiddle.net/mwrLc/12/

<div ng-controller="MyCtrl">
<select ng-model="searchCountries" ng-options="cc.country for cc in countriesList | orderBy:'country'">
    <option value="">Country...</option>
</select>
<select ng-model="searchCities" ng-options="ci.city for ci in citiesList | filter:searchCountries | orderBy:'city'">
    <option value="">City...</option>
</select>
<ul>
    <li ng-repeat="item in list | filter:searchCountries | filter:searchCities">
        <p>{{item.country}}</p>
        <p>{{item.city}}</p>
        <p>{{item.pop}}</p>
        <br>
    </li>
</ul>

第一个选择过滤第二个,但也过滤结果列表。
第二个选择仅过滤结果列表。
在选择一个国家和一个城市之前,它非常有效。然后,当您选择另一个国家/地区时,第二个选择被重置,但范围似乎卡在旧值上。

我找不到让它正常工作的方法...请帮助!

【问题讨论】:

    标签: select filter angularjs controller scope


    【解决方案1】:

    Ezekiel Victors 的解决方案非常出色。但是,在从 ng-include 引用控制器时,我试图让它工作时遇到了一些依赖注入问题。感谢 Ben Tesser 的帮助,我能够解决这个问题。我附上了一个详细说明修复的jsfiddle:

    http://jsfiddle.net/uxtx/AXvaM/

    主要区别在于您需要将 searchCountry/searchCity 包装为一个对象并将默认值设置为 null。手表也是如此。

      $scope.test = {
        searchCountry: null,
        searchCity: null
    };
    /// And your watch statement ///
        $scope.$watch('test.searchCountry', function () {
            $scope.test.searchCity =  null;
    });
    

    在您的模板中,您会将所有引用从 searchCountry/searchCity 更改为 test.searchCountry。

    我希望这可以节省一些时间。很麻烦。

    【讨论】:

      【解决方案2】:

      最好的解决方案是在通过$scope.$watch() 检测到更改为国家/地区模型时重置城市模型:

      function MyCtrl($scope) {
          // ...
      
          $scope.$watch('searchCountry', function() {
              $scope.searchCity = null;
          });
      }
      

      请注意,我将您的模型名称更改为单数形式(“searchCountry”和“searchCity”),考虑到这些模型的值设置为单个国家或城市,这更合适。

      这是完整的工作示例:http://jsfiddle.net/evictor/mwrLc/13/

      【讨论】:

      • 确实,这就是解决方案。我试过了,但它不适用于安装了 JQM 和 JQMA 适配器......我不知道为什么。 Angular 和 JQM 确实不能很好地结合在一起。在没有 JQM 的情况下也能正常工作。
      • 你能发一个小提琴或其他问题吗?我很想知道 JQM 正在做些什么来搞砸它!
      • jsfiddle.net/mwrLc/17 在这里。如您所见,第二个选择器从未重置,无法弄清楚为什么......一定是适配器的问题。
      • 我重命名了 searchCountries => searchCountry 和 searchCities => searchCity 让你失望了。您将我的 sn-p 粘贴到其中,但没有在其他任何地方相应地重命名模型。这是使用原始模型名称的固定小提琴:jsfiddle.net/evictor/mwrLc/18(尽管我再次建议重命名 searchCountries => searchCountry 等以确保语义正确性)。
      猜你喜欢
      • 2014-05-21
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多