- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的模板中有一个列表,其中将显示前 3 个项目,其余项目处于可折叠状态,即在“显示更多”链接中。
item3
显示更多
这是单击“显示更多”时的样子:
item5
少显示
该列表是高度动态的。 这些项目由名为 myList 的单个列表中的组件保存。可折叠来 self 们的模式库,其中预定义了 html 结构。所以我实际上不得不在我的模板中有 2 个不同的列表。第一个用于前 3 个项目,第二个用于可折叠的其余项目。为了不使用相同的 HTML 两次,我使用 ng-template 定义列表并重复使用它 2 次。这是模板的粗略结构:
<ng-template #listRef let-list>
<ul>
<ng-container *ngFor="let item of list; trackBy: trackByFn;">
<li @animation>
...
下面是模板的用法:
<!-- first part, max 3 items -->
<ng-container *ngTemplateOutlet="listRef; context: {$implicit: myList?.slice(0,3)}"></ng-container>
<!-- second part, rest in collapsible -->
<ng-container *ngIf="lebenslaufEintraege?.length > 3">
<div class="my-collapsible">
<a>...</a>
<div>..
<ng-container
*ngTemplateOutlet="listRef; context: {$implicit: myList?.slice(3,myList.length)}">
</ng-container>
此外,一旦添加了新项目,它就会进入动画列表。此外,如果一个项目被删除,它会保持动画状态。这是我的动画触发器:
trigger('animation', [
transition(':enter', [
style({ height: '0px', 'padding-top': '0', 'padding-bottom': '0'}), // initial
animate('0.5s',
style({ height: '*', 'padding-top': '*', 'padding-bottom': '*'})) // final
]),
transition(':leave', [
style({ height: '*', 'padding-top': '*', 'padding-bottom': '*', opacity: 1}), // initial
animate('0.5s',
style({ height: '0px', 'padding-top': '0', 'padding-bottom': '0', opacity: 0})) // final
])
])
问题是,当我们有超过 3 个项目并且可折叠项打开时,所有项目都在视口(viewport)中看到。在这种情况下,当一个新项目被添加到列表的第一部分时,它进入动画,但由于列表的最后一个项目也离开第一个列表并进入第二个列表,它也是动画的,我们不这样做想要。
换句话说;如果我们有 5 个项目,并在顶部添加一个新项目,item3 将从第一个列表中删除,并添加到第二个列表中,这也会触发动画。
我怎样才能阻止这个动画?
今天我发现,我们可以使用这个注解禁用单个项目的动画:
<li [@.disabled]="item.isAnimated" @animation>
但我无法想象我应该如何实现这个标志 isAnimated 的逻辑。一旦 item3 转移到 2. 列表,我必须检查它是否在之前的第一个列表中,但我没有第一个列表的先前状态。
我认为唯一可能的选择是以某种方式拦截动画,并查看列表的先前状态是否具有相同的项目,如果是则中断动画..
或者我应该从项目中删除动画,而是为我的主列表 (myList) 中的更改定义一些动画。但我不知道如何使用我的模板实现这一点。
感谢任何帮助。
最佳答案
您遇到的问题是,您无法区分某个项目是被添加到您的列表中还是只是被移动到位,因为该项目在移动或添加之前不存在于模板中。如果项目在移动到位之前就存在,那么您可以区分事件并相应地使用 [@.disabled]
。
一个简单但低效的解决方案是重复列表两次,并向模板传递一个指示符,通知它隐藏前三个元素或隐藏除后三个元素之外的所有元素。同样的逻辑应该用于禁用动画。
如果我们可以假设一次只能将一个元素添加到数组中,那么一种更有效的方法是只将一个额外的元素传递给模板。对于列表的顶部,传递前四个元素,对于底部,传递从索引 2 开始的所有项目。
简化的工作示例代码
<ng-container *ngTemplateOutlet="listRef; context: {$implicit: items | slice:0:3, hideIndex: 3}"></ng-container>
<ng-container *ngTemplateOutlet="listRef; context: {$implicit: items | slice:2, hideIndex: 0}"></ng-container>
<ng-template #listRef let-list let-hideIndex="hideIndex">
<ul>
<ng-container *ngFor="let x of list; let index = index">
<li @animation
[hidden]="hideIndex == index"
[@.disabled]="hideIndex == index">{{x}}
</li>
</ng-container>
</ul>
</ng-template>
发生的事情是索引 2 和 3 的项目将同时出现在两个列表中,隐藏并在其中一个适当的地方禁用动画。如果发生转变,相应的项目现在将只出现在列表中之前隐藏它们的位置。动画不会发生,因为它们之前已经添加到 DOM 中。
我最初只尝试使用隐藏,但如果快速添加项目,则动画的尾端将显示。这就是 [@.disabled]
也被使用的原因。
关于angular - 如何拦截:enter & :leave Animations in Angular with a changes Diff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54867591/
我在我们的系统中使用了多种不同的查询,我们想要获取分页的“总”记录。 我所遵循的所有地方都遵循这种结构 - var query1 = "select SQL_CALC_FOUND_ROWS ...."
我是 diff 的新手。我过去用过它。但我想知道,是否可以使用 diff 来跟踪希伯来语中两个文件之间的差异?我想比较具有元音点和重音符号的圣经希伯来文文件。 最佳答案 我不知道有任何“差异”(文件比
在Word中,有一个选项可以比较两个文档并找出两个文档之间的差异。我正在寻找一个类似的功能来比较两个Powerpoint文档。理想情况下,它将列出不同的单个幻灯片,每个幻灯片之间版本之间的差异以及进行
Bizzaro-Diff!!! 有没有办法做一个只显示一组文件中相同部分的 bizzaro/inverse-diff? (即远超过 three files ) 奇怪的问题,我知道...但我正在将某人的
我将 git 与默认的 Ubuntu 12.04 软件包一起使用: git --version git version 1.7.9.5 我找不到任何可以让 git diff 打开外部差异工具的机制,它
这是我的树 ├── test │ ├── dir1 │ └── dir2 │ ├── file │ └── file2 └── test2 └── dir2
我在 source forge ( cocoa.diff ) 上找到了这个补丁,这意味着我可以使用 cocoa.diff 文件进行补丁。但是,我似乎无法弄清楚如何使用 .diff 文件。 谢谢你的帮助
我修改了某个文件的第 494 行,并使用 cvs diff -u4 来查看我修改的内容,cvs 输出如下内容: @@ -490,9 +490,9 @@ if (!(hPtr->hSta
我需要知道这两个补丁是否有效相同。 我有一个旧补丁文件和使用 unix diff 命令创建的新补丁文件。由于补丁创建时的时间戳,只是比较补丁会报告差异。 有没有办法(有差异?)可以可靠地告诉我这两个补
我有这样的东西 src/sim/simulate.cc 41d40 public: > 61,62c60,61 a.patch 用于创建补丁文件,尽管也可能会抛出一些其他开关(-N?)
我想知道是否有工具可以显示与 debian 打包相关的补丁中使用的 *.diff 文件。我需要从该工具中获得的是它可以只读取 diff 文件并显示随更改的行更改的实际文件,就像 kdiff 或 mel
主要有3个git diff版本: git diff - difference between WORKING DIRECTORY & STAGE git diff --staged - differe
根据 Ender 的 Applied Econometric Time Series ,变量 y 的二阶差分定义为: Pandas 提供了 diff 函数,它接收“periods”作为参数。尽管如此,
这是我的差异的开始部分。 #!/usr/bin/env python import fileinput import difflib import subprocess import sys # fo
有没有办法在 svn diff 或任何其他工具(基于 linux)到 仅显示空格/制表符更改 ?. 目的,我不希望 checkin 这些差异。如果工具可以捕获这些差异,我可以在 checkin 之前将
我正在尝试比较忽略回车符的文件 - diff -b 在任何其他 unix 上的表现令人钦佩。但是在这个 AIX 5.3 机器上: tst1:tst2$ od -c testfile 00000
这个问题已经有答案了: What does the “@@…@@” meta line with at signs in svn diff or git diff mean? (3 个回答) 已关闭
我在使用 git diff --word-diff 时遇到了问题。问题是当 diff 获取没有换行符的文件(单行文件)时,它会逐行区分。我想逐字区分。 以下是当我在没有换行符的情况下比较文件时发生的情
这个问题在这里已经有了答案: Highlight changed lines and changed bytes in each changed line (12 个答案) 关闭 7 年前。 给定一
我正在尝试使用两个大文件夹(〜7GB)创建一个补丁。 这是我的做法: $ diff -Naurbw . ../other-folder > file.patch 但可能由于文件大小而导致未创建补丁并给
我是一名优秀的程序员,十分优秀!