3.7.2.7.1. 使用 TypeScript 创建 Polymer 组件

Polymer 团队通过 TypeScript 装饰器提供了更方便和简洁的创建组件类的途径。先看看下面这个例子:

  1. /// <reference path="../bower_components/cuba-app/cuba-app.d.ts" />
  2. /// <reference path="../bower_components/app-layout/app-drawer/app-drawer.d.ts" />
  3. /// <reference path="../bower_components/app-layout/app-drawer-layout/app-drawer-layout.d.ts" />
  4. namespace myapp {
  5. // Create shortcuts to decorators
  6. const {customElement, property, observe, query} = Polymer.decorators;
  7. @customElement('myapp-component')
  8. class MyappComponent extends (Polymer.mixinBehaviors([CubaAppAwareBehavior, CubaLocalizeBehavior], Polymer.Element) as
  9. new () => Polymer.Element & CubaAppAwareBehavior & CubaLocalizeBehavior) {
  10. @property({type: Boolean})
  11. enabled: boolean;
  12. @property({type: String})
  13. caption: string;
  14. @query('#drawer')
  15. drawer: AppDrawerElement;
  16. @observe('app')
  17. _init(app: cuba.CubaApp) {
  18. ...
  19. }
  20. @computed('enabled', 'caption')
  21. get enabledCaption() {
  22. ...
  23. }
  24. }
  25. }
  • /// <reference path="…​"/> - 允许通过这种方式引入 TypeScript 中其它元素或者类库。

  • @customElements('element-name') 装饰器使得无需定义 static get is() 方法,并且无需手动调用 customElements.define()

  • @property() 装饰器可以指定组件的属性。

  • @query('.css-selector') 装饰器可以给组件选择 DOM 元素。

  • @observe('propertyName') 装饰器可以定义属性观察者。

  • @computed() 装饰器可以定义计算方法。

参考 polymer-decorators github 仓库了解更多示例。