我正在尝试从数组中剪切项目,但每次都会删除错误的项目。我相信这是因为我使用orderBy过滤数组数组,因此DOM上的数组与控制器中的数组不同。我现在的问题是如何在过滤后正确地从数组中拼接正确的项目,还有什么办法可以在控制器中使用orderBy过滤器?
继承我的控制器
office.controller('notificationCtrl',['$scope',$http',function($scope,$http){
$scope.latest = [
{
id:1,
date : "2017-01-11T19:33:17.307452",
arrived: false,
location : "europe"
},
{
id: 2,
date: "2017-01-11T20:19:47.745673",
arrived:false,
location : "africa"
}
]
$scope.accept = function(array,index){
array.splice(index,1)
}
}]
Source.html
<div ng-repeat="recent in latest | orderBy : recent.date : true">
<button ng-click="accept(latest,$index)">Accept</button>
</div>
EDIT 我已按要求添加了示例数据,如果我尝试拼接第二个项目,则会在上面的数据中添加示例数据,而不是第一个项目。
答案 0 :(得分:1)
如此处https://docs.angularjs.org/api/ng/directive/ngRepeat所示,您可以在订购/过滤后使用group2
来获取/存储转发器的中间结果。
表达式中的变量为alias_expression - 您还可以提供 可选的别名表达式,然后存储中间件 应用滤波器后转发器的结果。通常 这用于在过滤器处于活动状态时呈现特殊消息 转发器,但过滤后的结果集为空。
例如:项目中的项目filter:x作为结果将存储 重复项目的片段作为结果,但仅在项目之后 已通过过滤器处理过。
请注意`作为[变量名]不是运算符,而是a ngRepeat微语法的一部分,所以它只能在最后使用(和 不是作为操作符,在表达式中。)
例如:项目中的项目过滤器:x | orderBy:订单| limitTo:限制为结果。
答案 1 :(得分:0)
我认为如果您在最后添加曲目,它将按预期工作。并且你的第一个参数中也有错误,你应该用这样的引号来表示属性:
<div ng-repeat="recent in latest | orderBy:'date':true track by $index">
<button ng-click="accept($index)">Accept</button>
</div>
你的控制器:
$scope.accept = function(index){
$scope.latest.splice(index,1)
}
如何在控制器中使用过滤器:
var orderedArray= $filter('orderBy')($scope.latest, 'date');
答案 2 :(得分:0)
所以我通过简单地反转我的列表来解决这个问题,比如
var latest = [
{
id:1,
date : "2017-01-11T19:33:17.307452",
arrived: false,
location : "europe"
},
{
id: 2,
date: "2017-01-11T20:19:47.745673",
arrived:false,
location : "africa"
}
]
$scope.latest = latest.reverse()
然后我删除了过滤器,只是在列表中进行了ng-repeat。
<div ng-repeat="recent in latest">
<button ng-click="accept($index)">Accept</button>
</div>