Repository created to record my practice learning Angular with exercises based on the Udemy Course of Maximilian Schwarzmüller.
| Number | Meaning |
|---|---|
X.0.0 |
Course hasn't been completed |
0.X.0 |
How many assignments/examples I have completed |
0.0.X |
How many times I have updated the next assignment/example |
After finishing its related Udemy course, I archive this repository and unarchive it when I start a new training and add a link in the Other practice repos section referring to its new repo. But I don't update any associated dependency due to technology changes during the years between each practice, and the produced code which works with the mentioned requirements.
- Node
v12.16.1or above - Angular CLI by running the command
npm run setup-angularornpm i -g @angular/cli
For a better search, I divided the lessons I learned in the following folders:
1-learning: An app used to show every assignment and example besides the main project.2-project: A single page application used to apply all the knowledge as the main project.
After cloning the repo, go to the created folder and install the node packages (including Angular CLI at the global level).
git clone https://github.com/NicolasOmar/angular-practice.git
cd angular-practice
npm run setup-allsetup-all is the command to install all the projects, but if you want to do it one by one, you can change that last line for one of the following:
| App Setup | Command |
|---|---|
| All | npm run setup-all |
| Learning | npm run setup-learning |
| Project | npm run setup-project |
To run the app in a new browser instance, run the following command in the project's folder:
npm startIn case you stopped the Angular service and don't want to open a new tab, run the following command:
ng serve- Basic understanding of a
Component- How to use a
Decoratorto declare a Component - Understand and use
String Interpolation
- How to use a
- How to use
PropertyBinding,DataBinding(using in one-way or two-way), andEventBinding - How to handle the DOM using
Structural Directives- Handle DOM display using
ngIf - Modify DOM styles using
ngStyleandngClass - Render multiple times a child component using
ngFor
- Handle DOM display using
- Use component approach to have a better project structure
- Shape a component's data using
Models - Pass data between components using
Input - Pass methods between components using
Output - Basic understanding of
ViewEncapsulationto handle styling scoping - Use
Local ReferenceandViewChildto access an Input value from the DOM
- Shape a component's data using
- A brief understanding of
Lifecycle Hooks - Implement
Servicesto handle data insteadPropertyBinding&EventBindingbetween components - Implement
Routingon the app- Extend app navigation by adding
child routes - Handle app navigation in Components using
programmable routing - Include data on routes using
queryParamsandfragments - Handle wildcard routes using
route redirection. - Add authentication based navigation using
Guards - Create a
Routing Moduleto isolate routing logic in a separated file
- Extend app navigation by adding
- Basic understanding of
Observables- Handle values using operators like
filterormap - Improve
EventEmitter Approachon Services usingSubject
- Handle values using operators like
- How to handle Forms using
Template-driven approach- How to bind form data in DOM and component
- Add
Validationand reflect it in the DOM - Use
Property bindingto set a default value - Handle a group of inputs in a
FormGroup
- How to handle Forms using
Reactive approach- Create a form structure using
FormGroupandFormControlto bind it in the DOM - Integrate provided and custom
Validatorsfor sync and async cases - Handle multiple inputs dynamically using
FormArray
- Create a form structure using
- How to handle DOM outputs using
Pipes- Use built-in cases like
dateoruppercaseand configure them - Create a custom pipe and implement it
- Basic understanding of handle asynchronous data with
asyncpipe
- Use built-in cases like
- How to make requests to an API
- Basic understanding and usage of Firebase
- How to use the
HttpModuleand methodspost,getanddelete. - Format response data before sending observable subscription using
pipe,map, andtapoperators - Handle errors using
catchErrorandthrowErrorfunctions - Add
headersandparamsvalues in any API call - Intercept API requests and responses using an
Interceptor - Handle API calls when the user is reloading the page using a
Resolver
- How to handle user authentication
- Use
enumsto list possible error in a file - Storage session data thought
sessionStorage - Learn more useful rxjs operators like
take,throwErrorandexhaustMap
- Use
- Load
Dynamics Componentsvia code (imperatively)- Use a
ComponentFactoryResolverto create the component from the Typescript side
- Use a
- How to organize app structure using Modules
- Understanding of
core,sharedandfeature moduleconcepts for module creation - Separate routing configs in each module
- How to improve app performance and loading by implementing
Lazy Loading - Understanding of implementation strategies for services (provide at the module level in specific cases)
- Understanding of
- How to use
environments variablesto store sensible keys when you deploy your app - Make a web offline through Service Workers
| Node | React | GraphQL | Typescript | HTML & CSS | Styling | Next.js | Python | Docker |
|---|---|---|---|---|---|---|---|---|