【问题标题】:ng-flow upload file - how to add to TOP of ng-repeat listng-flow 上传文件 - 如何添加到 ng-repeat 列表的顶部
【发布时间】:2016-07-05 18:20:47
【问题描述】:

我正在使用 angular ng-flow 组件进行文件上传,除了一些细微差别之外,它的工作非常好。我希望能够将我尝试上传的新文件放在列表顶部而不是列表底部,这样用户就可以清楚地看到最新上传的文件。我尝试通过命令使用角度顺序,但与将新文件添加到列表相比,除非它是现有列表,否则这似乎不起作用。

基本上,一旦完成,我会为每个文件创建一个新行并打印出文件详细信息:

<tr ng-repeat="file in $flow.files | orderBy:'file.name'" ng-hide="file.isComplete()">

上传前的列表如下所示:

老1 老2 老3

然后我添加一个新文件,我看到了:

老1 老2 老3 新的1

当我想要时:

新的1 老1 老2 老3

这可能更像是一个关于使用 Angular 的 ng-repeat 功能来处理添加到列表中的新项目的问题。

【问题讨论】:

    标签: angularjs ng-repeat flow ng-flow


    【解决方案1】:

    要使用orderBy过滤器,只需让过滤器中的属性,如下:

    <tr ng-repeat="file in $flow.files | orderBy: 'name'" ng-hide="file.isComplete()">
    

    编辑

    由于您想按时间顺序对项目进行排序,它应该会给您预期的结果:

    <tr ng-repeat="file in files | orderBy: '$index': true">
    

    这是一个 sn-p 工作:

    var app = angular.module('app', []);
    
    app.controller('mainCtrl', function($scope) {
      $scope.files = [  
         {  
            "id":1,
            "name":"Old1"
         },
         {  
            "id":2,
            "name":"Old2"
         },
         {  
            "id":3,
            "name":"Old3"
         }
      ];
    
      var increment = 1;
      $scope.push = function (name) {
        $scope.files.push({ "id": increment + 3, "name": name + increment++ })
      }
    });
    <!DOCTYPE html>
    <html ng-app="app">
    
    <head>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>      
    </head>
    
    <body ng-controller="mainCtrl">
    <p>Before Filter:
    <table>
      <tr ng-repeat="file in files">
        <td ng-bind="file.name"></td>
      </tr>
    </table>
    <hr />
    <p>After Filter:
    <table>
      <tr ng-repeat="file in files | orderBy: '$index': true">
        <td ng-bind="file.name"></td>
      </tr>
    </table>
    <hr>
    <button type="button" ng-click="push('New')">Add new file</button>
    </body>
    
    </html>

    【讨论】:

    • 如果文件都存在就可以了。问题是我正在向文件列表中添加一个新项目。在您的示例中,这 4 个文件都作为数组的一部分存在,您只是对名称进行排序。我不想点名。我想说如果添加了一个新文件,那么无论它的名称如何,它都应该是第一个而不是最后一个。所以以编程方式添加一个新文件 files.push({ "id":3, "name":"New1" }) 并查看它在列表中的位置。
    • 所以,如果我现在理解得很好,您不需要按名称对项目进行排序,这只是一种尝试,您正在寻找的是一种按 chronological排序的方法> 订购,对吧?如果是这样,请查看我编辑的答案,并让我知道它现在是否正确。
    • 这在您的示例中效果很好,并且正是我正在寻找的......但是对于我的代码,它的行为不像您的那样。它可能与$index有关吗?当我打印出 {{ file }} 的样子时,我看到了一个带有 $$hashKey:"object:56" 的复杂对象。我会改为按 $hashKey 排序吗?
    • 不,$index 由ng-repeat 提供。你能做一个简单的演示来演示你的问题吗?
    • 不确定如何使用所需的 ng-flow 指令进行简单演示。也许这就是导致问题的原因。将您的答案标记为正确,因为它应该解决问题。可能是 ng-flow 的问题。
    【解决方案2】:

    你可以像这样使用过滤器来实现逆序打印arrai

    app.filter('reverse', function() {
    return function(items) {
    return items.slice().reverse();
     };
    });
    

    然后可以像这样使用:

      <tr ng-repeat="file in $flow.files | reverse" ng-hide="file.isComplete()">
    

    【讨论】:

    • 好吧,如果问题是反转数组,她可以简单地做:&lt;tr ng-repeat="file in $flow.files | orderBy:'file.name':true" ng-hide="file.isComplete()"&gt;,结果与预期的结果完全不同:“old1 old2 old3 new1”。
    • 它是什么。你能解释一下吗?
    • 是的,你可以看看下面我的回答。
    • 我认为我的代码在做同样的事情。当您将项目添加到数组中时,它将最后存储。所以以相反的顺序访问数组就可以了。
    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2015-06-24
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多