在ng重复期间,数组以角度拼接错误的项目

时间:2017-01-11 19:32:46

标签: javascript angularjs

我正在尝试从数组中剪切项目,但每次都会删除错误的项目。我相信这是因为我使用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 我已按要求添加了示例数据,如果我尝试拼接第二个项目,则会在上面的数据中添加示例数据,而不是第一个项目。

3 个答案:

答案 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>