query
在动画序列中正在播放的元素中查找一个或多个内部元素。和 animateChild() 一起使用。
Finds one or more inner elements within the current element that is being animated within a sequence. Use with animate().
query(selector: string, animation: AnimationMetadata | AnimationMetadata[], options: AnimationQueryOptions = null): AnimationQueryMetadata
参数
selector | string | 要查询的元素,或一组具有 Angular 中定义的某些特征的一组元素,可以用如下令牌(token)进行指定: The element to query, or a set of elements that contain Angular-specific characteristics, specified with one or more of the following tokens.
|
animation | AnimationMetadata | AnimationMetadata[] | 要应用到所查询到的单个或一组元素上的一个或多个动画步骤。 该数组会被视为一个动画序列。 One or more animation steps to apply to the queried element or elements. An array is treated as an animation sequence. |
options | AnimationQueryOptions | 一个配置对象。使用 An options object. Use the 'limit' field to limit the total number of items to collect. 可选. 默认值是 `null`. |
返回值
一个封装了查询数据的对象。
AnimationQueryMetadata: An object that encapsulates the query data.
使用说明
多个令牌可以合并成复合查询选择器。比如:
Tokens can be merged into a combined query selector string. For example:
query(':self, .record:enter, .record:leave, @subTrigger', [...])
query() 函数会收集多个元素,其内部是用 element.querySelectorAll 实现的。 用配置对象中的 limit 字段可以限制要收集的总数。比如:
The query() function collects multiple elements and works internally by using element.querySelectorAll. Use the limit field of an options object to limit the total number of items to be collected. For example:
query('div', [
animate(...),
animate(...)
], { limit: 1 })
默认情况下,当没有找到条目时就会抛出错误。设置 optional 标志可以忽略此错误。比如:
By default, throws an error when zero items are found. Set the optional flag to ignore this error. For example:
query('.some-element-that-may-not-be-there', [
animate(...),
animate(...)
], { optional: true })
使用范例
Usage Example
下面的例子查询内部元素,并用 animateChild() 来独立控制它们的动画。
The following example queries for inner elements and animates them individually using animate().
@Component({
selector: 'inner',
template: `
<div [@queryAnimation]="exp">
<h1>Title</h1>
<div class="content">
Blah blah blah
</div>
</div>
`,
animations: [
trigger('queryAnimation', [
transition('* => goAnimate', [
// hide the inner elements
query('h1', style({ opacity: 0 })),
query('.content', style({ opacity: 0 })),
// animate the inner elements in, one by one
query('h1', animate(1000, style({ opacity: 1 }))),
query('.content', animate(1000, style({ opacity: 1 }))),
])
])
]
})
class Cmp {
exp = '';
goAnimate() {
this.exp = 'goAnimate';
}
}