== Component Declaration Hierarchy ==
+Easy mistake to make!
+Especially with lazy-loaded components. You don't know it's a
+problem until you've loaded the conflicting component.
+
Module Foo declares Component SomeCompent.
Module Bar wants to use Component SomeCompent.
Module Bar cannot also declare SomeComponent.
@ViewChild('')...
+Ref is set to null if the child component is destroyed
+
+== keyboard actions ==
+
+(keyup.enter)="submit()"
+
+== observables ==
+
+value of .pipe(tap(...))
+
+== Groking route data ==
+
+The route API is complex, but expressive.
+
+REVISIT WITH SIMPLER EAMPLE TODO
+Simple example:
+
+Execution context /eg2/staff/admin/server/config
+constructor(private route: ActivatedRoute) {}
+
+this.route.snapshot.parent.url[0].path === 'config'
+
+== lifecycle hooks
+
+ngOnInit used frequently
+https://angular.io/guide/lifecycle-hooks
+
+
+== GOTCHAS
+=== Error handling
+
+* fatal errors (route-preventing) returns to base app page.
+
+=== Methods vs. Functions
+
+(click)="doStuff()" => this.doStuff() => this == component instance
+[handleClick]="doStuff" => doStuff() => this == the HTML element
+
+== compiling
+
+* diffs between dev and prod (jit/aot)
+
+compile regularly with --prod to verify
+and ng lint
+
+in --watch mode kill and restart after any major changes
+(moving modules around, adding new components, etc.)
+