Angular 提供了 state 方法用于定义状态

55.gif

默认代码解析

  1. <div class="container">
  2. <div class="panel panel-default">
  3. <div class="panel-heading" (click)="toggle()">
  4. 一套框架, 多种平台, 移动端 & 桌面端
  5. </div>
  6. <div class="panel-body">
  7. <p>
  8. 使用简单的声明式模板,快速实现各种特性。使用自定义组件和大量现有组件,扩展模板语言。在几乎所有的
  9. IDE 中获得针对 Angular
  10. 的即时帮助和反馈。所有这一切,都是为了帮助你编写漂亮的应用,而不是绞尽脑汁的让代码“能用”。
  11. </p>
  12. <p>
  13. 从原型到全球部署,Angular 都能带给你支撑 Google
  14. 大型应用的那些高延展性基础设施与技术。
  15. </p>
  16. <p>
  17. 通过 Web Worker 和服务端渲染,达到在如今(以及未来)的 Web
  18. 平台上所能达到的最高速度。 Angular 让你有效掌控可伸缩性。基于
  19. RxJS、Immutable.js 和其它推送模型,能适应海量数据需求。
  20. </p>
  21. <p>
  22. 学会用 Angular
  23. 构建应用,然后把这些代码和能力复用在多种多种不同平台的应用上 ——
  24. Web、移动 Web、移动应用、原生应用和桌面原生应用。
  25. </p>
  26. </div>
  27. </div>
  28. </div>
  29. <style>
  30. .container {
  31. margin-top: 100px;
  32. }
  33. .panel-heading {
  34. cursor: pointer;
  35. }
  36. </style>
  1. mport { Component } from "@angular/core"
  2. @Component({
  3. selector: "app-root",
  4. templateUrl: "./app.component.html",
  5. styles: []
  6. })
  7. export class AppComponent {
  8. isExpended: boolean = false
  9. toggle() {
  10. this.isExpended = !this.isExpended
  11. }
  12. }

创建动画

  1. trigger("expandCollapse", [
  2. // 使用 state 方法定义折叠状态元素对应的样式
  3. state(
  4. "collapsed",
  5. style({
  6. height: 0,
  7. overflow: "hidden",
  8. paddingTop: 0,
  9. paddingBottom: 0
  10. })
  11. ),
  12. // 使用 state 方法定义展开状态元素对应的样式
  13. state("expanded", style({ height: "*", overflow: "auto" })),
  14. // 定义展开动画
  15. transition("collapsed => expanded", animate("400ms ease-out")),
  16. // 定义折叠动画
  17. transition("expanded => collapsed", animate("400ms ease-in"))
  18. ])
  1. <div class="panel-body" [@expandCollapse]="isExpended ? 'expanded' : 'collapsed'"></div>