-
Notifications
You must be signed in to change notification settings - Fork 0
Examples
To register a component, you need to create a class which extends TypedPolymer, and after declaration, call the .register() method on it.
Components by default take the name from the class name, so a class MyComponent will create a component with a name my-component.
class MyComponent extends TypedPolymer {}
MyComponent.register(); // will register `my-component`If you are not satisfied with automatic naming, you can always pass the name to the .register function.
class MyComponent extends TypedPolymer {}
MyComponent.register("my-new-name"); // will register `my-new-name`You can also use a decorator instead of .register() function.
@register class MyComponent extends TypedPolymer {}
@register("another-named-component") class AnotherComponent extends TypedPolymer {}There are 3 ways of creating an instance.
Little preparation
class MyComponent extends TypedPolymer {
constructor() {
// will be called as factoryImpl
}
}
MyComponent.register();<my-component></my-component>document.CreateElement("my-component")MyComponent.create()There are 2 ways of registering components, using MyComponent.register() function and @register decorator. It works the same way as the function (with or without a name). The only restriction is that if you use it, it has to go as a first decorator.
Provide an HTML template, as a string. Currently templates have to be inline, but will be possible to provide a path to a template.
@template(`<h1>Hello World!</h1>`)
class MyComponent extends TypedPolymer {
// ...
}
MyComponent.register();Provide a list of styles (contents for the <style> tags), or shared styles names (order of style as declared).
@styles(["normalize-css", `:host {display: none} h1 {display: flex}`])
class MyComponent extends TypedPolymer {
// ...
}
MyComponent.register();Extend native HTML elements.
@extend("button")
class MyComponent extends TypedPolymer {
// ...
}
MyComponent.register();Static attributes on host.
@hostAttributes({ contenteditable: true })
class MyComponent extends TypedPolymer {
// ...
}Add a behavior to the component.
@behavior(MyBehavior)
class MyComponent extends TypedPolymer {
// ...
}@set decorator is used to create a property (or a computed property).
It has the total of 5 interfaces:
-
@set(DefaultValue) property- set the default value and guess the type -
@set(Type) property- set the type only (default value will be undefined) -
@set(DefaultValue, Type) property- set the default value and set the type -
@set(Type) method(a, b) {}- creates a computed property, sets type and observes properties listed as arguments -
@set("o.a, o.b", Type) method(a, b) {}- creates a computed property, sets type and observes properties or paths provided in first argument
class MyComponent extends TypedPolymer {
@set(Boolean) booleanType: boolean;
@set(5) numberValue: number;
@set(() => ({testing: true})) objectValue: any;
@set(null, String) stringValue: string;
@set(Boolean) computed1(numberValue): boolean { return numberValue > 5 }
@set("objectValue.testing", Boolean) computed2(isTesting: boolean): boolean { return isTesting }
}
MyComponent.register();Causes the corresponding attribute to be set on the host node when the property value changes.
class MyComponent extends TypedPolymer {
@set(Boolean) @reflectToAttribute booleanType: boolean;
}
MyComponent.register();Makes it impossible to set the property directly by assignment or data binding.
class MyComponent extends TypedPolymer {
@set(Boolean) @readOnly booleanType: boolean;
}
MyComponent.register();Makes the property available for two-way data binding.
class MyComponent extends TypedPolymer {
@set(Boolean) @notify booleanType: boolean;
}
MyComponent.register();Registers a handler to the event, that will unregister once fired.
class MyComponent extends TypedPolymer {
@once("some-event")
handler(): void {}
}Registers a handler to the event.
class MyComponent extends TypedPolymer {
@on("some-event")
someEventHandler(): void {}
@on("my-element.some-event") // will listen to `some-event` on element with an id `my-element`
someEventHandlerWithId(): void {}
@on("some-event", "button") // will listen to `some-event` on a button
someEventHandlerWithSelector(): void {}
}Sets an observer function for a single property/path or a list of properties/paths.
class MyComponent extends TypedPolymer {
@set(Number) num: number;
@set(String) str: string;
@observe("number")
numChanged(newValue: number, oldValue: number): void {}
@observe("num, str")
numOrStrChanged(num: number, str: string): void {}
}