为什么我的 ng-repeat 项目没有按预期进行过滤?
Why are my ng-repeat items not filtering as expected here?
Plnkr: http://plnkr.co/edit/Q34J9szbLeGgc4jkcNUM?p=preview
我有一个名为 tags 的简单数组,其中包含 4 个具有 tweets 值和 vol 值的对象。
当我点击 按推文排序 或 按成交量排序 按钮时,我希望这些数字有意义,比如从高位开始到低或从低到高,但数字是乱序的。
标记:
<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 订购。带有 vol:5
的项目应该排在 vol:30
之后
更新: 看起来它只过滤数字中的第一个数字?为什么不取整个数字?
按点击一次的推文过滤:
按第二次点击推文过滤:
您按字母顺序排列的字符串值进行排序。
'10'
'5'
'30'
这个字符串顺序是10 / 30 / 5。
将您的 'vol' 和 '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
}
);
正确排序你的推文。
Plnkr: http://plnkr.co/edit/Q34J9szbLeGgc4jkcNUM?p=preview
我有一个名为 tags 的简单数组,其中包含 4 个具有 tweets 值和 vol 值的对象。
当我点击 按推文排序 或 按成交量排序 按钮时,我希望这些数字有意义,比如从高位开始到低或从低到高,但数字是乱序的。
标记:
<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 订购。带有 vol:5
的项目应该排在 vol:30
更新: 看起来它只过滤数字中的第一个数字?为什么不取整个数字?
按点击一次的推文过滤:
按第二次点击推文过滤:
您按字母顺序排列的字符串值进行排序。
'10' '5' '30'
这个字符串顺序是10 / 30 / 5。
将您的 'vol' 和 '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
}
);
正确排序你的推文。