【问题标题】:compare two variable in angularjs比较angularjs中的两个变量
【发布时间】:2014-08-11 07:44:17
【问题描述】:

在我的代码中,我使用自定义过滤器根据性别(男性女性)进行过滤。但是当我单击男性值时,也会显示女性值,因为女性值中包含男性。当我单击女性时,它会成功过滤。 这是我的代码。

app.filter('myFilter', function() {
  return function(items, filterby, filterbyc) {

    var filtered = [];
    var filtermatch = new RegExp(filterby, 'i');

    angular.forEach(items, function(value) {
      if ((filtermatch.test(value.gender))) {
        filtered.push(value);
      }
      return filtered;
    })
  };
});

那么除了 .test 之外,我还可以使用什么函数来比较这些值,以便在比较男性和女性值时,它不会从女性中获取男性。

这是我的html代码

<ul id="result">
  <li ng-repeat="x in details | myFilter:filterby">
    <div>Name :{{x.name }}</div>
    <div>Address : {{x.address }}</div>
    <div>Gender: {{x.gender}}</div>
    <div>Country: {{x.country }}</div>
    <div>Agree: {{x.agree }}</div>
  </li>
</ul>

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    为什么不使用提供的过滤器方法呢?

    <ul id="result">
      <li ng-repeat="x in details | filter:{gender:filterby}:true">
        <div>Name :{{x.name }}</div>
        <div>Address : {{x.address }}</div>
        <div>Gender: {{x.gender}}</div>
        <div>Country: {{x.country }}</div>
        <div>Agree: {{x.agree }}</div>
      </li>
    </ul>
    

    使用 :true 您可以配置过滤器值以使用相等(而不是 subsctring)进行比较。当 filterby 的值为“male”时,过滤器现在应该只显示男性。

    【讨论】:

    • 实际上我想在自定义过滤器中实现它但没有任何想法:(
    • 为什么要实现自定义过滤器?
    【解决方案2】:

    您不必为该自定义过滤器创建板条箱,请参阅此处http://jsbin.com/yoheg/5/edit

    只需添加第三个参数即可过滤true

    <body ng-app="app">
      <div ng-controller="firstCtrl">
        <select ng-model="gender_search">
          <option value="male">Male </option>
           <option value="female">Famale </option>
        </select>
      <ul id="result">
    
      <li ng-repeat="x in details  | filter: {gender:gender_search}:true       ">
        <div>Name :{{x.name }}</div>
        <div>Address : {{x.address }}</div>
        <div>Gender: {{x.gender}}</div>
        <div>Country: {{x.country }}</div>
        <div>Agree: {{x.agree }}</div>
      </li>
    </ul>
          </div>
    </body>
    

    如果你真的需要创建自定义过滤器,你可以这样做:http://jsbin.com/yoheg/2/edit

    app.filter('myFilter', function($filter) {
      return function(items, search) {
    
        if (!search) {
        return items;
         }
        return  $filter('filter')(items, {gender : search}, true);
    
      };
    });
    

    HTML:

          <ul id="result2">
    
      <li ng-repeat="x in details | myFilter : gender_search  ">
        <div>Name :{{x.name }}</div>
        <div>Address : {{x.address }}</div>
        <div>Gender: {{x.gender}}</div>
        <div>Country: {{x.country }}</div>
        <div>Agree: {{x.agree }}</div>
      </li>
    </ul>
    

    选项 3

    没有 angularjs $fitler:http://jsbin.com/yoheg/4/edit

    JS:

    app.filter('myFilter', function($filter) {
      return function(items, search) {
    
        if (!search) {
        return items;
         }
    
        var filtered = [];
    
        angular.forEach(items, function(item){
    
          if (item.gender === search)
            {
    
              filtered.push(item);
            }
    
        });
        return filtered;
    
    
    
      };
    });
    

    html:

     <ul id="result2">
    
      <li ng-repeat="x in details | myFilter : gender_search  ">
        <div>Name :{{x.name }}</div>
        <div>Address : {{x.address }}</div>
        <div>Gender: {{x.gender}}</div>
        <div>Country: {{x.country }}</div>
        <div>Agree: {{x.agree }}</div>
      </li>
    </ul>
    

    【讨论】:

    • 我想在自定义过滤器中实现它
    • @Viveka 或者如果你想在没有角度 $filter 的情况下完全做到这一点,请看这里jsbin.com/yoheg/4
    • @Viveka 与值进行比较只需使用 value_a===value_b
    • 这是我的代码,但它在 plunker 中不起作用。我是 angularjs 的新手,所以我不知道将我的代码转换为 plunker。我试过了,但它不起作用。
    • 但我的代码是正确的,我唯一的错误是这个男性过滤器
    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多