代码之家  ›  专栏  ›  技术社区  ›  Leon Gaban

为什么我的ng重复项没有按预期过滤?

  •  2
  • Leon Gaban  · 技术社区  · 9 年前

    项目负责人: http://plnkr.co/edit/Q34J9szbLeGgc4jkcNUM?p=preview

    我有一个名为标签的简单数组,它包含4个具有tweets值和vol值的对象。

    enter image description here

    当我单击 通过推特订购 按体积排序 按钮我希望数字有意义,比如从高到低或从低到高,但数字是无序的。

    标记:

     <div class="sidebar" ng-controller="sidebar">
      <header class="my-header">
        <button ng-click="reOrderByTweets()">Order by Tweets</button>
        <button ng-click="reOrderByVol()">Order by Vol</button>
      </header>
      <ul>
        <li ng-repeat="t in tags" ng-mouseleave="leaveTag(t)">
          <div class="tag-container">
            <div class="tag border1"
                 ng-mouseover="showTagDetails(t)">{{t.name}} | tweets: {{t.tweets}} | vol: {{t.vol}}</div>
            <tag-details tag="t"></tag-details>
          </div>
        </li>
      </ul>
    </div>
    

    JavaScript:

    $scope.tags.push(
      {
        name: 'Item 1 ', 
        tweets: '412',
        vol: '50'
      },
      {
        name: 'Item 2 ', 
        tweets: '10',
        vol: '500'
      },
      {
        name: 'Item 3 ', 
        tweets: '67',
        vol: '5'
      },
      {
        name: 'Item 4 ', 
        tweets: '0',
        vol: '30'
      }
    );
    

    功能:

    function reOrderByTweets() {
        console.log('reOrderByTweets');
        vs.orderReverse = !vs.orderReverse;
        $scope.tags = $filter('orderBy')($scope.tags, 'tweets', vs.orderReverse);
        console.log('vs.orderReverse = ', vs.orderReverse); // true or false
        console.log('$scope.tags = ', $scope.tags);
    }
    
    function reOrderByVol() {
        console.log('reOrderByVol');
        vs.orderReverse = !vs.orderReverse;
        $scope.tags = $filter('orderBy')($scope.tags, 'vol', vs.orderReverse);
        console.log('vs.orderReverse = ', vs.orderReverse); // true or false
        console.log('$scope.tags = ', $scope.tags);
    }
    

    如下图所示,订购时 体积 。具有的项目 vol:5 应该排在最后 vol:30

    enter image description here


    更新: 看起来只是在过滤数字中的第一个数字?为什么不需要整个数字?

    按点击一次的推文过滤:

    enter image description here

    按第二次单击的推文筛选:

    enter image description here

    1 回复  |  直到 9 年前
        1
  •  5
  •   Phill    9 年前

    您按字符串值排序,该字符串值按字母顺序排序。

    '10' '5' '30'

    这个字符串的顺序是10/30/5。

    更改“体积”&'tweets发送给数字:

      $scope.tags.push(
        {
          name: 'Item 1 ', 
          tweets: 412,
          vol: 50
        },
        {
          name: 'Item 2 ', 
          tweets: 10,
          vol: 216
        },
        {
          name: 'Item 3 ', 
          tweets: 67,
          vol: 15
        },
        {
          name: 'Item 4 ', 
          tweets: 0,
          vol: 30
        }
      );
    

    正确排序推文。

    enter image description here