【问题标题】:Select Filter dont work properly, Angular js ng-options选择过滤器无法正常工作,Angularjs ng-options
【发布时间】:2014-04-28 08:13:53
【问题描述】:

您好,
我是 Angular 新手。
在我当前的演示应用程序中,我使用选择过滤器 ng-option 创建了一些用户列表。
有一些我没有找到的错误。
错误:
当我选择女性时,它会过滤并只显示女性用户
但是当我选择 男性选项它向我显示完整列表并且不过滤女性用户。
这是我的代码:
html页面:

  <div class="row" style="margin-top: 15px;">
    <div class="col-lg-2 divPad">
        <!--Sidebar content-->
        <b>Sort by gender:</b>
          <select ng-model="query.gender" class="btn btn-default" >
                  <option value="">All users</option>
                  <option ng-repeat="gender in genders" value="{{gender}}">{{gender}}</option>
              </select>
    </div>
</div>
    <div class="row" style="margin-top: 15px;">
        <div class="col-lg-2 divPad">
            <b>Sort by Hobbies:</b>
        <input class="form-control" ng-model="query.hobby" >
        </div>
    </div>
<div class="row" style="margin-top: 15px;">
    <div class="col-lg-12">
        <ul class="phones">
            <li ng-repeat="user in users | filter:query "  class="thumbnail phone-listing">
                <a href="#/users/{{user.name}}" class="thumb">
                    <img style="margin-top: 15px;" ng-src="{{user.imageUrl}}"></a>
                <a href="#/users/{{user.name}}">{{user.name}}</a>
                <p><b>Hobby:</b>&nbsp;{{user.hobby}}</p>
                 <p><b>Gender:</b>&nbsp;{{user.gender}}</p>
            </li>
        </ul>

    </div>
</div>

控制器页面:

    zenvaControllers.controller('UserListCtrl', ['$scope', 'User', function ($scope, User) {
    $scope.users = User.query();
    $scope.genders = ["Male", "Female"];
}]);

json 页面:

  [
    {
        "name": "Lucy",
        "gender": "Female",
        "hobby": "pets",
        "imageUrl": "img/users/avatar1.png"

    },
    {
        "name": "Betty",
        "gender": "Female",
        "hobby": "pets",
         "imageUrl": "img/users/avatar2.png"
    },
    {
        "name": "Ronald",
        "gender": "Male",
        "hobby": "music",
        "imageUrl": "img/users/avatar3.png"
    },
    {
        "name": "Christopher",
        "gender": "Male",
        "hobby": "sports",
        "imageUrl": "img/users/avatar4.png"
    },
    {
        "name": "Ximena",
        "gender": "Female",
        "hobby": "reading",
        "imageUrl": "img/users/avatar5.png"
    },
    {
        "name": "Paul",
        "gender": "Male",
        "hobby": "shopping",
         "imageUrl": "img/users/avatar6.png"
    },
    {
        "name": "Charlie",
        "gender": "Male",
        "hobby": "pets",
       "imageUrl": "img/users/avatar7.png"
    }
]

提前致谢。

【问题讨论】:

标签: javascript angularjs ng-options


【解决方案1】:

我会编写两个自定义过滤器来处理这两种情况:

hobbyFiltergenderFilter

演示Plunker

iApp.filter('hobbyFilter', function() {
   return function( items, query) {
    var filtered = [];


    if(query.hobby === undefined || query.hobby === ''){
      return items;
    }

    angular.forEach(items, function(item) {
      console.log(item.gender, query.gender);
      if(
        query.hobby !== undefined &&
        query.hobby !== '' &&
        item.hobby.indexOf(query.hobby) >= 0)
        {
          filtered.push(item);
        }
    });

    return filtered;
  };
});


 iApp.filter('genderFilter', function() {
   return function( items, query) {

    var filtered = [];


    if(query.gender === undefined || query.gender === ''){
      return items;
    }

    angular.forEach(items, function(item) {

      if(item.gender === query.gender){
        filtered.push(item);
      }
    });

    return filtered;
  };
});

用法

<li ng-repeat="user in users |  genderFilter:query |  hobbyFilter:query">

【讨论】:

  • 嗨 Maxim,我在此链接中还有一个问题:stackoverflow.com/questions/18982900/… 有解决方案可以在单击时显示用户/人员的姓名,但是,在我上次讨论的演示应用程序中,我有过滤器,所以当我过滤了索引错误的男性或女性。例如:当我只显示男性性别并首先单击它时,它会显示我的用户数组的名字(露西)而不是一些男性名字。我应该添加什么来解决这个问题
  • @MishaBeskin 会很好,如果您可以在 fiddle 或 plunker 中重现该问题。
  • 嗨 Max,这是我在 Plunker 上的演示应用程序:plnkr.co/edit/hGJInjSde7vSGGcbTrQL?p=preview
  • @MishaBeskin 通常不是在旧问题下提出不同问题的好方法。我会提出新问题,因为 SO 不仅可以解决个人问题,而​​且可以帮助其他人。此外,我会接受上述示例(如果它适合您)无论如何这里是一个工作链接:plnkr.co/edit/xGsgAdIDUgGY9jgiDkoJ?p=preview 我所做的:改为通过$index user 模型。这是一个正确的方法。享受
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2018-05-09
相关资源
最近更新 更多