Angular 2 排序列表动画

Posted

技术标签:

【中文标题】Angular 2 排序列表动画【英文标题】:Angular 2 Sort List Animations 【发布时间】:2017-02-04 08:20:29 【问题描述】:

我会发布代码,但我真的不知道从哪里开始。我已经阅读了https://angular.io/docs/ts/latest/guide/animations.html 动画指南,但它不能满足我的要求。

假设您有一个使用*ngFor 显示的项目列表,并且列表顶部包含排序按钮。例如说默认排序是“名称”。它会在初始屏幕上显示如下

Sort By: Name | Value
[name: a, value:3]
[name: b, value:2]
[name: c, value:1]

然后假设用户按“值”按值排序。

Sort By: Name | Value
[name: c, value:1]
[name: b, value:2]
[name: a, value:3]

我知道我可以简单地对绑定到视图组件的列表进行排序,但我想要动画。使用当前的 Angular 2 动画 API 甚至可以做到这一点吗?

【问题讨论】:

我有一个类似的问题,但对我来说,我可以为每个移动的元素设置进入/离开动画。事实上,如果您对列表中的项目进行重新排序,它不会触发 * => void,我根本不知道如何对它做出反应。 【参考方案1】:

可以做到,想法是让所有元素始终呈现。相反,我们只是根据它们的顺序更改每个元素的属性,因此它会触发动画。

我只是做了一个非常简单的来展示这个想法。

angular.module('StackApp', [])
  .controller('MainCtrl', function($scope) 
  'use strict';

  $scope.title = 'List';
  var item1 =  title: "orange", pos: 1 ;
  var item2 =  title: "apple", pos: 2 ;
  var item3 =  title: "banana", pos: 3 ;
  
  $scope.items = [item1, item2, item3];
  
  $scope.sort = function() 
    item1.pos = 2;
    item2.pos = 1;
  
  
);
ul li 
  -webkit-transition: all 1.5s ease-in-out;
  -moz-transition: all 1.5s ease-in-out;
  transition: all 1.5s ease-in-out;


.pos1 
  padding-left: 1px;

.pos2 
  padding-left: 20px;

.pos3 
  padding-left: 30px;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="StackApp">
  <div ng-controller="MainCtrl">
    <h1> title </h1>
    <button ng-click="sort()">Sort</button>
    <ul>
      <li ng-repeat="item in items" ng-class="'pos' + item.pos"> item.title </li>
    </ul>
  </div>
</body>

【讨论】:

【参考方案2】:

上面的答案是关于水平定位的元素,但你可以使用这个想法并以这种方式实现垂直元素:

    使所有项目 div 位置:ansolute 且高度相同。使用 ngStyle 将父 div 高度设置为元素高度之和。

在 css 中为每个项目 div 设置过渡。

    根据索引设置每个元素的顶部

    在排序时重新计算每个项目的顶部(我认为您可以向数组项目添加额外的道具并使用 ngStyle 应用它

所以项目顶部值的变化应该受到过渡的影响。

你也可以使用翻译转换

【讨论】:

以上是关于Angular 2 排序列表动画的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angularfire2 Angular2 中对 FirebaseListObservable 列表进行排序?

html Angular 1.4.x中的通用列表排序/关键字:订单列表选择器服务排序

html Angular 1.4.x中的通用列表排序/关键字:订单列表选择器服务排序

html Angular 1.4.x中的通用列表排序/关键字:订单列表选择器服务排序

html Angular 1.4.x中的通用列表排序/关键字:订单列表选择器服务排序

html Angular 1.4.x中的通用列表排序/关键字:订单列表选择器服务排序