angular - 每次使用 Angular 4 更改数组时触发动画

标签 angular angular-animations

每次数组变化时都需要触发动画

我目前正在使用 *ngfor 迭代一系列产品,每次长度变化时都会触发动画。我正在使用 Angular 4。

<ul class="items col col-md-12" *ngIf="hasProducts()" [@productsIntro]="products.length">

问题是每次数组发生变化时我都需要触发动画,而不仅仅是数组的长度。有时数组长度相同但数组中的项目不同,因此动画不会触发。

我不确定如何解决这个问题,希望有人能帮我解决这个问题。

<ul class="items col col-md-12" *ngIf="hasProducts()" [@productsIntro]="products.length">
    <li class="col col-xs-12 col-sm-12 col-md-4" *ngFor="let product of products">
      <div class="item">
        <a href="" class="product-name">{{product.product_name}}</a>
        <div class="image-and-info col col-xs-8 col-sm-8 col-md-12">
          <div class="product-thumb">
            <img src="../../assets/img-filler.png" alt="{{product.product_name}}">
          </div>
          <div class="info">
            <div class="sku">SKU: {{product.sku}}</div>
            <div class="price">Price: {{product.price | currency:'USD':true:'1.2-2'}}</div>
          </div>
        </div>
        <div class="product-col col col-xs-4 col-sm-4 col-md-12">
          <div class="btn-group" role="group" aria-label="Basic example">
            <button type="button" class="btn btn-solid" (click)="viewProduct(product)">View Product</button>
            <button type="button" class="btn btn-solid add-to-cart" (click)="addToCart($event)">Add to Cart</button>
          </div>
        </div>
      </div>
    </li>
  </ul>

触发表单组件:

trigger('productsIntro', [
  transition('* => *', [
    query(':enter', style({ opacity: 0 }), {optional: true}),
    query(':enter', stagger('100ms', [
      animate('1s ease-in', keyframes([
        style({opacity: 0, transform: 'translateY(-10%)', offset: 0}),
        style({opacity: .5, transform: 'translateY(10px)',  offset: 0.3}),
        style({opacity: 1, transform: 'translateY(0)',     offset: 1.0}),
      ]))]), {optional: true})
  ])
])

最佳答案

发现products数组长度从0开始变化时没有触发动画。 我的解决方案是删除 HTML 组件中的条件并添加切换函数以在每次更改数组时更改变量状态:

切换功能:

animationState = 'inactive';
toggleState() {
this.animationState = this.animationState === 'active' ? 'inactive' : 'active';

更改自:

<ul class="items col col-md-12" *ngIf="hasProducts()" [@productsIntro]="animationState">
    <li class="col col-xs-12 col-sm-12 col-md-4" *ngFor="let product of products">

改为:

<ul class="items col col-md-12"  [@productsIntro]="animationState">
    <li class="col col-xs-12 col-sm-12 col-md-4" *ngFor="let product of products">

关于angular - 每次使用 Angular 4 更改数组时触发动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165636/

相关文章:

angular - 从Electron Angular项目运行Karma时出错

android - 如何有条件地在 ionic 4 中设置根页面?

javascript - 使用 react 形式以 Angular 验证密码和确认密码

javascript - Angular 6 路由器过渡动画不起作用(导航栏)

css - Angular - 在路由更改时为外部元素设置动画

angular - 在两个 Observable 完成后做一些事情

css - 更多/更少分页 Angular 动画

Angular 4动态高度动画在动画后恢复

Angular:伪元素的动画,如 :before, :after

Angular 动画不适用于生产版本(跳到最终状态而不实际设置动画)