Sketching out hosting Angular Components as Custom Elements / Web Components
Angular components are
//annotate with metadata about template and styles @Component({ selector: 'my-component', templateUrl: 'my-component.html', styleUrls: [ 'my-component.css' ], viewEncapsulation: ViewEncapsulation.Native //Shadow DOM V0 providers: [ SomeService ], }) class MyComponent { //public API for component consumers @Input() someProperty:any; //property values passed in @Output() someEvent new EventEmitter(); //events go out @ViewChild(ChildComponent) childView:ChildComponent; @ViewChildren(ItemComponent) items:QueryList<ItemComponent> //bind to host element events @HostListener('mousemove', ['$event']) onMouseMouse(event:MouseEvent){} //bind to host properties and attributes @HostBinding('attr.aria-foo') someValue; //lifecycle events ngOnInit(){} ngOnChanges(changes){} ngDoCheck(){} ngOnDestroy(){} //view lifecycle events ngAfterContentInit(){} ngAfterContentChecked(){} ngAfterViewInit(){} ngAfterViewChecked(){} }
class MyCustomElement extends HTMLElement { //newable constructor(...optionalArgs?:any[]){} //attributes to observe changes to static get observedAttributes():string[]{ return ['value', 'foo'] } //properties someProp:string; set foo(value:string) { } get foo() { return 'foo' } //dispatch events onClick(){ this.dispatchEvent(new CustomEvent('some-event', options)) } //called when attributes change attributeChangedCallback(attributeName, oldValue, newValue, namespace):void {} //called when connected to a document / shadow tree connectedCallback():void {} //called when removed from document disconnectedCallback():void {} }