Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Speed Up Your Angular Apps with Ivy

Speed Up Your Angular Apps with Ivy

Avatar for Chris Sevilleja

Chris Sevilleja

November 20, 2019

Other Decks in Programming

Transcript

  1. @sonicparke @chrisoncode AppComponent.ngfactory.js? [sm]Q1 ERROR TypeError: _co.getImageUr is not a

    function at Object.eval [as updateRenderer] (AppComponent.html:1)
  2. @sonicparke @chrisoncode import { Component } from '@angular/core'; @Component({ selector:

    'app*root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) export class AppComponent { }
  3. @sonicparke @chrisoncode export class AppComponent { constructor(private injector: Injector) {}

    public loadLogin() { import('./login*form/login*form.component') } }
  4. @sonicparke @chrisoncode export class AppComponent { constructor(private injector: Injector) {}

    public loadLogin() { import('./login*form/login*form.component').then(c .d { ɵrenderComponent(c.LoginFormComponent, { host: 'app*login*form', injector: this.injector }); }); } }
  5. @sonicparke @chrisoncode export class LoginFormModule { constructor(private resolver: ComponentFactoryResolver) {}

    public resolveComponentFactory()Q ComponentFactory<LoginFormComponent> { return this.resolver.resolveComponentFactory(LoginFormComponent); } }
  6. @sonicparke @chrisoncode export class AppComponent { @ViewChild('loginForm', { read: ViewContainerRef,

    static: true }) public loginForm: ViewContainerRef; constructor(private injector: Injector) {} public loadLogin() { import('./login*form*material/login*form.module').then(m .d { const injector = ɵcreateInjector(m.LoginFormModule, this.injector); const loginFormModule = injector.get(m.LoginFormModule); const componentFactory = loginFormModule.resolveComponentFactory(); const componentRef = this.loginForm.createComponent(componentFactory); componentRef.changeDetectorRef.markForCheck(); }); } }
  7. @sonicparke @chrisoncode export class AppComponent { @ViewChild('loginForm', { read: ViewContainerRef,

    static: true }) public loginForm: ViewContainerRef; constructor(private injector: Injector) {} }
  8. @sonicparke @chrisoncode export class AppComponent { @ViewChild('loginForm', { read: ViewContainerRef,

    static: true }) public loginForm: ViewContainerRef; constructor(private injector: Injector) {} public loadLogin() { import('./login*form*material/login*form.module').then(m .d { const injector = ɵcreateInjector(m.LoginFormModule, this.injector); const loginFormModule = injector.get(m.LoginFormModule); const componentFactory = loginFormModule.resolveComponentFactory(); const componentRef = this.loginForm.createComponent(componentFactory); componentRef.changeDetectorRef.markForCheck(); }); } }
  9. @sonicparke @chrisoncode public loadLogin() { import('./login*form*material/login*form.module').then(m .d { const injector

    = ɵcreateInjector(m.LoginFormModule, this.injector); const loginFormModule = injector.get(m.LoginFormModule); const componentFactory = loginFormModule.resolveComponentFactory(); const componentRef = this.loginForm.createComponent(componentFactory); componentRef.changeDetectorRef.markForCheck(); }); }
  10. @sonicparke @chrisoncode public loadLogin() { import('./login*form*material/login*form.module').then(m .d { const injector

    = ɵcreateInjector(m.LoginFormModule, this.injector); const loginFormModule = injector.get(m.LoginFormModule); const componentFactory = loginFormModule.resolveComponentFactory(); const componentRef = this.loginForm.createComponent(componentFactory); componentRef.changeDetectorRef.markForCheck(); }); }
  11. @sonicparke @chrisoncode public loadLogin() { import('./login*form*material/login*form.module').then(m .d { const injector

    = ɵcreateInjector(m.LoginFormModule, this.injector); const loginFormModule = injector.get(m.LoginFormModule); const componentFactory = loginFormModule.resolveComponentFactory(); const componentRef = this.loginForm.createComponent(componentFactory); componentRef.changeDetectorRef.markForCheck(); }); }
  12. @sonicparke @chrisoncode public loadLogin() { import('./login*form*material/login*form.module').then(m .d { const injector

    = ɵcreateInjector(m.LoginFormModule, this.injector); const loginFormModule = injector.get(m.LoginFormModule); const componentFactory = loginFormModule.resolveComponentFactory(); const componentRef = this.loginForm.createComponent(componentFactory); componentRef.changeDetectorRef.markForCheck(); }); }
  13. @sonicparke @chrisoncode public loadLogin() { import('./login*form*material/login*form.module').then(m .d { const injector

    = ɵcreateInjector(m.LoginFormModule, this.injector); const loginFormModule = injector.get(m.LoginFormModule); const componentFactory = loginFormModule.resolveComponentFactory(); const componentRef = this.loginForm.createComponent(componentFactory); componentRef.changeDetectorRef.markForCheck(); }); }
  14. @sonicparke @chrisoncode .k * Zone JS is required by default

    for Angular itself. .p import 'zone.js/dist/zone';
  15. @sonicparke @chrisoncode .k * Zone JS is required by default

    for Angular itself. .p .r import 'zone.js/dist/zone';
  16. @sonicparke @chrisoncode export class CounterComponent implements OnInit { data =

    interval(1000); number: number; ngOnInit() { this.data .pipe(tap(() .d ɵmarkDirty(this))) .subscribe(num .d (this.number = num)); } }
  17. @sonicparke @chrisoncode export class CounterComponent implements OnInit { data =

    interval(1000); number: number; ngOnInit() { this.data .pipe(tap(() .d ɵmarkDirty(this))) .subscribe(num .d (this.number = num)); } }
  18. @sonicparke @chrisoncode export class CounterComponent implements OnInit { data =

    interval(1000); number: number; ngOnInit() { this.data .pipe(tap(() .d ɵmarkDirty(this))) .subscribe(num .d (this.number = num)); } }