Angular - The Complete Guide

Master Angular (formerly "Angular 2") and build awesome, reactive web apps with the successor of Angular.js

Start

This course starts from scratch, you neither need to know Angular 1 nor Angular 2!

Angular 9 simply is the latest version of Angular 2, you will learn this amazing framework from the ground up in this course!

Join the most comprehensive, popular and bestselling Angular course and benefit not just from a proven course concept but from a huge community as well!

From Setup to Deployment, this course covers it all! You'll learn all about Components, Directives,Services, Forms, Http Access, Authentication, Optimizing an Angular App with Modules and Offline Compilation and much more - and in the end: You'll learn how to deploy an application!

But that's not all! This course will also show you how to use the Angular CLI and feature a complete project, which allows you to practice the things learned throughout the course!

Angular is one of the pmost modern, performance-efficient and powerful frontend frameworks you can learn as of today. It allows you to build great web apps which offer awesome user experiences! Learn all the fundamentals you need to know to get started developing Angular applications right away.

This course uses TypeScript

TypeScript is the main language used by the official Angular team and the language you'll mostly see in Angular tutorials. It's a superset to JavaScript and makes writing Angular apps really easy. Using it ensures, that you will have the best possible preparation for creating Angular apps. Check out the free videos for more information.

TypeScript knowledge is, however, not required - basic JavaScript knowledge is enough.

Why Angular?

Angular is the next big deal. Being the successor of the overwhelmingly successful Angular.js framework it’s bound to shape the future of frontend development in a similar way. The powerful features and capabilities of Angular allow you to create complex, customizable, modern, responsive and user friendly web applications.

Angular 9 simply is the latest version of the Angular framework and simply an update to Angular 2.

Angular is faster than Angular 1 and offers a much more flexible and modular development approach. After taking this course you’ll be able to fully take advantage of all those features and start developing awesome applications immediately.

Due to the drastic differences between Angular 1 and Angular (=Angular 9) you don’t need to know anything about Angular.js to be able to benefit from this course and build your futures projects with Angular.

Get a very deep understanding of how to create Angular applications

This course will teach you all the fundamentals about modules, directives, components, databinding, routing, HTTP access and much more! We will take a lot of deep dives and each section is backed up with a real project. All examples showcase the features Angular offers and how to apply them correctly.

Specifically you will learn:

  • Which architecture Angular uses
  • How to use TypeScript to write Angular applications
  • All about directives and components, including the creation of custom directives/ components
  • How databinding works
  • All about routing and handling navigation
  • What Pipes are and how to use them
  • How to access the Web (e.g. RESTful servers)
  • What dependency injection is and how to use it
  • How to use Modules in Angular
  • How to optimize your (bigger) Angular Application
  • An introduction to NgRx and complex state management
  • We will build a major project in this course so that you can practice all concepts
  • and so much more!
  • Pay once, benefit a lifetime!

Don’t lose any time, gain an edge and start developing now!

Section: Getting Started

1. Course Introduction (0:57) Preview
2. What is Angular? (1:59) Preview
3. Angular vs Angular 2 vs Latest Version (3:49) Preview
4. Angular Setup & First App (7:31) Preview
5. Join our Online Learning Community (1:00) Preview
6. Editing the First App (10:05) Preview
7. The Course Structure (4:00) Preview
8. How to get the Most out of the Course (2:25) Preview
9. What is TypeScript? (2:09) Preview
10. A Basic Project Setup using Bootstrap for Styling (4:27) Preview
11. Where to find the Course Source Code (1:00) Preview

Section: The Basics

12. Module Introduction (0:56) Start
13. How an Angular App gets Loaded and Started (7:11) Preview
14. Components are Important! (3:08) Preview
15. Creating a New Component (6:51) Start
16. Understanding the Role of AppModule and Component Declaration (5:15) Start
17. Using Custom Components (1:12) Start
18. Creating Components with the CLI & Nesting Components (3:51) Start
19. Working with Component Templates (3:08) Start
20. Working with Component Styles (4:02) Start
21. Fully Understanding the Component Selector (3:50) Start
22. Assignment: Component Basics (Problem) (1:33) Start
23. Assignment: Component Basics (Solution) (6:42) Start
24. What is Databinding? (2:49) Start
25. String Interpolation (5:19) Start
26. Property Binding (6:34) Start
27. Property Binding vs String Interpolation (3:07) Start
28. Event Binding (4:09) Start
29. Passing and Using Data with Event Binding (4:37) Start
30. Two-Way-Databinding (2:47) Start
31. Combining all Forms of Databinding (1:46) Start
32. Assignment: Data & Event Binding (Problem) (1:07) Start
33. Assignment: Data & Event Binding (Solution) (5:12) Start
34. Understanding Directives (2:17) Start
35. Using ngIf to Output Data Conditionally (3:52) Start
36. Enhancing ngIf with an Else Condition (2:46) Start
37. Styling Elements Dynamically with ngStyle (5:01) Start
38. Applying CSS Classes Dynamically with ngClass (2:53) Start
39. Outputting Lists with ngFor (3:43) Start
40. Assignment: Directives (Problem) (2:15) Start
41. Assignment: Directives (Solution) (7:06) Start
42. Getting the Index when using ngFor (2:52) Start

Section: Course Project - The Basics

43. Project Introduction (1:04) Start
44. Planning the App (5:33) Start
45. Setting up the Application (4:31) Start
46. Creating the Components (9:32) Start
47. Using the Components (3:15) Start
48. Adding a Navigation Bar (5:09) Start
49. Creating a "Recipe" Model (4:33) Start
50. Adding Content to the Recipes Components (7:41) Start
51. Outputting a List of Recipes with ngFor (4:37) Start
52. Displaying Recipe Details (5:52) Start
53. Working on the ShoppingListComponent (1:49) Start
54. Creating an "Ingredient" Model (2:35) Start
55. Creating and Outputting the Shopping List (2:27) Start
56. Adding a Shopping List Edit Section (3:28) Start
57. Wrap Up & Next Steps (0:54) Start

Section: Debugging

58. Understanding Angular Error Messages (4:36) Start
59. Debugging Code in the Browser Using Sourcemaps (5:32) Start
60. Using Augury to Dive into Angular Apps (2:01) Start

Section: Components & Databinding Deep Dive

61. Module Introduction (0:36) Start
62. Splitting Apps into Components (5:56) Start
63. Property & Event Binding Overview (1:44) Start
64. Binding to Custom Properties (5:43) Start
65. Assigning an Alias to Custom Properties (1:59) Start
66. Binding to Custom Events (9:05) Start
67. Assigning an Alias to Custom Events (0:57) Start
68. Custom Property and Event Binding Summary (2:02) Start
69. Understanding View Encapsulation (4:59) Start
70. More on View Encapsulation (2:43) Start
71. Using Local References in Templates (4:36) Start
72. Getting Access to the Template & DOM with @ViewChild (5:02) Start
73. Projecting Content into Components with ng-content (3:22) Start
74. Understanding the Component Lifecycle (4:54) Start
75. Seeing Lifecycle Hooks in Action (11:54) Start
76. Lifecycle Hooks and Template Access (2:33) Start
77. Getting Access to ng-content with @ContentChild (3:00) Start
78. Wrap Up (0:49) Start
79. Assignment: Components & Databinding (Problem) (2:17) Start
80. Assignment: Components & Databinding (Solution) (12:21) Start

Section: Course Project - Components & Databinding

81. Introduction (0:50) Start
82. Adding Navigation with Event Binding and ngIf (7:31) Start
83. Passing Recipe Data with Property Binding (4:43) Start
84. Passing Data with Event and Property Binding (Combined) (10:31) Start
85. Allowing the User to Add Ingredients to the Shopping List (7:22) Start

Section: Directives Deep Dive

86. Module Introduction (1:23) Start
87. ngFor and ngIf Recap (3:36) Start
88. ngClass and ngStyle Recap (2:56) Start
89. Creating a Basic Attribute Directive (6:42) Start
90. Using the Renderer to build a Better Attribute Directive (7:04) Start
91. Using HostListener to Listen to Host Events (3:00) Start
92. Using HostBinding to Bind to Host Properties (3:17) Start
93. Binding to Directive Properties (6:43) Start
94. What Happens behind the Scenes on Structural Directives (3:04) Start
95. Building a Structural Directive (6:13) Start
96. Understanding ngSwitch (2:49) Start

Section: Course Project - Directives

97. Building and Using a Dropdown Directive (6:25) Start

Section: Using Services & Dependency Injection

98. Module Introduction (1:39) Start
99. Why would you Need Services? (2:04) Start
100. Creating a Logging Service (3:32) Start
101. Injecting the Logging Service into Components (6:21) Start
102. Creating a Data Service (6:41) Start
103. Understanding the Hierarchical Injector (2:40) Start
104. How many Instances of Service Should It Be? (2:12) Start
105. Injecting Services into Services (5:13) Start
106. Using Services for Cross-Component Communication (4:06) Start
107. Services in Angular 6+ (1:00) Start
108. Assignment: Services (Problem) (1:44) Start
109. Assignment: Services (Solution) (9:37) Start

Section: Course Project - Services & Dependency Injection

110. Introduction (1:23) Start
111. Setting up the Services (1:15) Start
112. Managing Recipes in a Recipe Service (4:07) Start
113. Using a Service for Cross-Component Communication (5:07) Start
114. Adding the Shopping List Service (5:04) Start
115. Using Services for Pushing Data from A to B (3:08) Start
116. Adding Ingredients to Recipes (3:41) Start
117. Passing Ingredients from Recipes to the Shopping List (via a Service) (7:03) Start

Section: Changing Pages with Routing

118. Module Introduction (1:26) Start
119. Why do we need a Router? (1:15) Start
120. Setting up and Loading Routes (8:01) Start
121. Navigating with Router Links (5:18) Start
122. Understanding Navigation Paths (4:54) Start
123. Styling Active Router Links (5:01) Start
124. Navigating Programmatically (3:28) Start
125. Using Relative Paths in Programmatic Navigation (5:09) Start
126. Passing Parameters to Routes (3:10) Start
127. Fetching Route Parameters (4:01) Start
128. Fetching Route Parameters Reactively (7:25) Start
129. An Important Note about Route Observables (2:42) Start
130. Passing Query Parameters and Fragments (5:53) Start
131. Retrieving Query Parameters and Fragments (3:15) Start
132. Practicing and some Common Gotchas (6:07) Start
133. Setting up Child (Nested) Routes (4:28) Start
134. Using Query Parameters - Practice (5:36) Start
135. Configuring the Handling of Query Parameters (1:50) Start
136. Redirecting and Wildcard Routes (4:36) Start
137. Redirection Path Matching (1:00) Start
138. Outsourcing the Route Configuration (4:40) Start
139. An Introduction to Guards (1:45) Start
140. Protecting Routes with canActivate (8:55) Start
141. Protecting Child (Nested) Routes with canActivateChild (2:51) Start
142. Using a Fake Auth Service (1:43) Start
143. Controlling Navigation with canDeactivate (12:28) Start
144. Passing Static Data to a Route (5:56) Start
145. Resolving Dynamic Data with the resolve Guard (9:53) Start
146. Understanding Location Strategies (4:43) Start
147. Wrap Up (0:51) Start

Section: Course Project - Routing

148. Planning the General Structure (1:36) Start
149. Setting Up Routes (7:58) Start
150. Adding Navigation to the App (1:41) Start
151. Marking Active Routes (1:31) Start
152. Fixing Page Reload Issues (2:51) Start
153. Child Routes: Challenge (1:54) Start
154. Adding Child Routing Together (4:21) Start
155. Configuring Route Parameters (6:22) Start
156. Passing Dynamic Parameters to Links (3:01) Start
157. Styling Active Recipe Items (1:14) Start
158. Adding Editing Routes (3:44) Start
159. Retrieving Route Parameters (3:19) Start
160. Programmatic Navigation to the Edit Page (4:46) Start
161. One Note about Route Observables (0:52) Start
162. Project Cleanup (1:00) Start

Section: Understanding Observables

163. Module Introduction (4:25) Start
164. Analyzing Angular Observables (2:15) Start
165. Getting Closer to the Core of Observables (6:50) Start
166. Building a Custom Observable (4:46) Start
167. Errors & Completion (6:39) Start
168. Observables & You! (1:55) Start
169. Understanding Operators (8:39) Start
170. Subjects (8:17) Start
171. Wrap Up (1:15) Start
172. Useful Resources & Links (1:00) Start

Section: Course Project - Observables

173. Improving the Reactive Service with Observables (Subjects) (6:04) Start

Section: Handling Forms in Angular Apps

174. Module Introduction (1:19) Start
175. Why do we Need Angular's Help? (2:21) Start
176. Template-Driven (TD) vs Reactive Approach (1:16) Start
177. An Example Form (1:32) Start
178. TD: Creating the Form and Registering the Controls (5:42) Start
179. TD: Submitting and Using the Form (6:15) Start
180. TD: Understanding Form State (2:29) Start
181. TD: Accessing the Form with @ViewChild (3:03) Start
182. TD: Adding Validation to check User Input (4:14) Start
183. Built-in Validators & Using HTML5 Validation (1:00) Start
184. TD: Using the Form State (4:27) Start
185. TD: Outputting Validation Error Messages (2:23) Start
186. TD: Set Default Values with ngModel Property Binding (2:15) Start
187. TD: Using ngModel with Two-Way-Binding (2:48) Start
188. TD: Grouping Form Controls (3:30) Start
189. TD: Handling Radio Buttons (3:27) Start
190. TD: Setting and Patching Form Values (4:42) Start
191. TD: Using Form Data (4:44) Start
192. TD: Resetting Forms (1:47) Start
193. Assignment: Template-driven Forms (Problem) (1:15) Start
194. Assignment: Template-driven Forms (Solution) (12:17) Start
195. Introduction to the Reactive Approach (0:40) Start
196. Reactive: Setup (2:26) Start
197. Reactive: Creating a Form in Code (4:07) Start
198. Reactive: Syncing HTML and Form (3:58) Start
199. Reactive: Submitting the Form (2:15) Start
200. Reactive: Adding Validation (2:50) Start
201. Reactive: Getting Access to Controls (3:47) Start
202. Reactive: Grouping Controls (3:46) Start
203. Reactive: Arrays of Form Controls (FormArray) (7:31) Start
204. Reactive: Creating Custom Validators (6:11) Start
205. Reactive: Using Error Codes (3:20) Start
206. Reactive: Creating a Custom Async Validator (4:38) Start
207. Reactive: Reacting to Status or Value Changes (2:11) Start
208. Reactive: Setting and Patching Values (2:09) Start
209. Assignment: Reactive Forms (Problem) (1:04) Start
210. Assignment: Reactive Forms (Solution) (13:48) Start

Section: Course Project - Forms

211. Introduction (0:59) Start
212. TD: Adding the Shopping List Form (3:42) Start
213. Adding Validation to the Form (2:21) Start
214. Allowing the Selection of Items in the List (4:24) Start
215. Loading the Shopping List Items into the Form (3:02) Start
216. Updating existing Items (3:15) Start
217. Resetting the Form (2:34) Start
218. Allowing the the User to Clear (Cancel) the Form (1:16) Start
219. Allowing the Deletion of Shopping List Items (2:52) Start
220. Creating the Template for the (Reactive) Recipe Edit Form (4:59) Start
221. Creating the Form For Editing Recipes (5:06) Start
222. Syncing HTML with the Form (3:52) Start
223. Adding Ingredient Controls to a Form Array (5:39) Start
224. Adding new Ingredient Controls (3:38) Start
225. Validating User Input (5:10) Start
226. Submitting the Recipe Edit Form (7:30) Start
227. Adding a Delete and Clear (Cancel) Functionality (4:47) Start
228. Redirecting the User (after Deleting a Recipe) (1:47) Start
229. Adding an Image Preview (1:48) Start
230. Providing the Recipe Service Correctly (1:58) Start
231. Deleting Ingredients and Some Finishing Touches (3:34) Start
232. Deleting All Items In A FormArray (1:00) Start

Section: Using Pipes to Transform Output

233. Introduction & Why Pipes are Useful (2:01) Start
234. Using Pipes (3:28) Start
235. Parametrizing Pipes (2:10) Start
236. Where to learn more about Pipes (1:56) Start
237. Chaining Multiple Pipes (2:20) Start
238. Creating a Custom Pipe (6:42) Start
239. Parametrizing a Custom Pipe (2:36) Start
240. Example: Creating a Filter Pipe (7:01) Start
241. Pure and Impure Pipes (or: How to "fix" the Filter Pipe) (4:46) Start
242. Understanding the "async" Pipe (4:03) Start
243. Assignment: Pipes (Problem) (1:13) Start
244. Assignment: Pipes (Solution) (5:10) Start

Section: Making Http Requests

245. A New IDE (0:43) Start
246. Module Introduction (1:06) Start
247. How Does Angular Interact With Backends? (3:09) Start
248. The Anatomy of a Http Request (2:27) Start
249. Backend (Firebase) Setup (2:35) Start
250. Sending a POST Request (10:11) Start
251. GETting Data (2:56) Start
252. Using RxJS Operators to Transform Response Data (3:59) Start
253. Using Types with the HttpClient (5:07) Start
254. Outputting Posts (2:15) Start
255. Showing a Loading Indicator (2:03) Start
256. Using a Service for Http Requests (6:37) Start
257. Services & Components Working Together (3:28) Start
258. Sending a DELETE Request (3:27) Start
259. Handling Errors (6:38) Start
260. Using Subjects for Error Handling (2:39) Start
261. Using the catchError Operator (2:13) Start
262. Error Handling & UX (2:07) Start
263. Setting Headers (3:18) Start
264. Adding Query Params (4:01) Start
265. Observing Different Types of Responses (7:32) Start
266. Changing the Response Body Type (3:16) Start
267. Introducing Interceptors (7:24) Start
268. Manipulating Request Objects (2:32) Start
269. Response Interceptors (2:46) Start
270. Multiple Interceptors (4:52) Start
271. Wrap Up (1:57) Start
272. Useful Resources & Links (1:00) Start

Section: Course Project - Http

273. Module Introduction (0:55) Start
274. Backend (Firebase) Setup (2:03) Start
275. Setting Up the DataStorage Service (5:32) Start
276. Storing Recipes (6:39) Start
277. Fetching Recipes (5:38) Start
278. Transforming Response Data (4:17) Start
279. Resolving Data Before Loading (7:31) Start
280. Fixing a Bug with the Resolver (1:43) Start

Section: Authentication & Route Protection in Angular

281. Module Introduction (0:52) Start
282. How Authentication Works (5:01) Start
283. Adding the Auth Page (6:44) Start
284. Switching Between Auth Modes (4:02) Start
285. Handling Form Input (3:44) Start
286. Preparing the Backend (3:15) Start
287. Preparing the Signup Request (8:24) Start
288. Sending the Signup Request (4:36) Start
289. Adding a Loading Spinner & Error Handling Logic (6:34) Start
290. Improving Error Handling (5:39) Start
291. Sending Login Requests (6:00) Start
292. Login Error Handling (4:28) Start
293. Creating & Storing the User Data (10:16) Start
294. Reflecting the Auth State in the UI (9:41) Start
295. Adding the Token to Outgoing Requests (10:15) Start
296. Attaching the Token with an Interceptor (8:48) Start
297. Adding Logout (3:18) Start
298. Adding Auto-Login (9:55) Start
299. Adding Auto-Logout (7:39) Start
300. Adding an Auth Guard (10:56) Start
301. Wrap Up (1:55) Start
302. Useful Resources & Links (1:00) Start

Section: Dynamic Components

303. Module Introduction (1:09) Start
304. Adding an Alert Modal Component (7:33) Start
305. Understanding the Different Approaches (2:28) Start
306. Using ngIf (3:05) Start
307. Preparing Programmatic Creation (8:27) Start
308. Creating a Component Programmatically (4:46) Start
309. Understanding entryComponents (5:06) Start
310. Data Binding & Event Binding (5:05) Start
311. Wrap Up (1:25) Start
312. Useful Resources & Links (1:00) Start

Section: Angular Modules & Optimizing Angular Apps

313. Module Introduction (0:41) Start
314. What are Modules? (2:26) Start
315. Analyzing the AppModule (6:24) Start
316. Getting Started with Feature Modules (8:59) Start
317. Splitting Modules Correctly (4:09) Start
318. Adding Routes to Feature Modules (4:35) Start
319. Component Declarations (1:58) Start
320. The ShoppingList Feature Module (4:27) Start
321. Understanding Shared Modules (8:10) Start
322. Understanding the Core Module (5:48) Start
323. Adding an Auth Feature Module (4:22) Start
324. Understanding Lazy Loading (2:52) Start
325. Implementing Lazy Loading (12:20) Start
326. More Lazy Loading (3:02) Start
327. Preloading Lazy-Loaded Code (3:39) Start
328. Modules & Services (5:46) Start
329. Loading Services Differently (8:24) Start
330. Ahead-of-Time Compilation (9:50) Start
331. Wrap Up (0:49) Start
332. Useful Resources & Links (1:00) Start

Section: Deploying an Angular App

333. Module Introduction (0:52) Start
334. Deployment Preparation & Steps (3:18) Start
335. Using Environment Variables (4:44) Start
336. Example: Deploying to Firebase Hosting (9:01) Start
337. Server-side Routing vs Client-side Routing (1:00) Start

Section: Bonus: Working with NgRx in our Project

338. Module Introduction (0:46) Start
339. What is Application State? (9:07) Start
340. What is NgRx? (6:55) Start
341. Getting Started with Reducers (6:44) Start
342. Adding Logic to the Reducer (5:47) Start
343. Understanding & Adding Actions (6:16) Start
344. Setting Up the NgRx Store (4:48) Start
345. Selecting State (8:51) Start
346. Dispatching Actions (7:09) Start
347. Multiple Actions (9:37) Start
348. Preparing Update & Delete Actions (3:08) Start
349. Updating & Deleting Ingredients (10:59) Start
350. Expanding the State (9:17) Start
351. Managing More State via NgRx (9:52) Start
352. Removing Redundant Component State Management (3:32) Start
353. First Summary & Clean Up (5:25) Start
354. One Root State (11:39) Start
355. Setting Up Auth Reducer & Actions (8:25) Start
356. Dispatching Auth Actions (5:53) Start
357. Auth Finished (For Now...) (6:43) Start
358. An Important Note on Actions (6:24) Start
359. Exploring NgRx Effects (3:38) Start
360. Defining the First Effect (5:19) Start
361. Effects & Error Handling (8:57) Start
362. Login via NgRx Effects (9:08) Start
363. Managing UI State in NgRx (7:30) Start
364. Finishing the Login Effect (7:11) Start
365. Preparing Other Auth Actions (4:09) Start
366. Adding Signup (6:17) Start
367. Further Auth Effects (6:13) Start
368. Adding Auto-Login with NgRx (8:16) Start
369. Adding Auto-Logout (6:31) Start
370. Finishing the Auth Effects (2:29) Start
371. Using the Store Devtools (6:20) Start
372. The Router Store (2:11) Start
373. Getting Started with NgRx for Recipes (11:03) Start
374. Fetching Recipe Detail Data (9:14) Start
375. Fetching Recipes & Using the Resolver (12:00) Start
376. Fixing the Auth Redirect (2:10) Start
377. Update, Delete and Add Recipes (15:11) Start
378. Storing Recipes via Effects (5:52) Start
379. Cleanup Work (1:58) Start
380. Wrap Up (2:12) Start
381. Alternative NgRx Syntax (1:00) Start
382. Useful Resources & Links (1:00) Start

Section: Bonus: Angular Universal

383. Module Introduction (3:04) Start
384. Adding Angular Universal (10:01) Start
385. Adding Angular Universal with NestJS (6:18) Start
386. Deploying Angular Universal Apps (1:00) Start
387. The Remaining Lectures In This Module (1:00) Start
388. [OPTIONAL] Module Introduction (1:40) Start
389. [OPTIONAL] Getting Started with Angular Universal (1:31) Start
390. [OPTIONAL] Working on the App Module (4:02) Start
391. [OPTIONAL] Adding a Server-Side Build Workflow (4:55) Start
392. [OPTIONAL] Adding a NodeJS Server (8:26) Start
393. [OPTIONAL] Pre-Rendering the App on the Server (4:11) Start
394. [OPTIONAL] Next Steps (1:38) Start
395. Angular Universal Gotchas (1:00) Start

Section: Angular Animations

396. Module Introduction (1:03) Start
397. Setting Up A Starting Project (0:52) Start
398. Animations Triggers and State (7:11) Start
399. Switching between States (2:04) Start
400. Transitions (1:54) Start
401. Advanced Transitions (5:21) Start
402. Transition Phases (3:57) Start
403. The "void" State (6:11) Start
404. Using Keyframes for Animations (5:32) Start
405. Grouping Transitions (2:11) Start
406. Using Animation Callbacks (2:38) Start

Section: Adding Offline Capabilities with Service Workers

407. Module Introduction (2:09) Start
408. Adding Service Workers (12:41) Start
409. Caching Assets for Offline Use (5:28) Start
410. Caching Dynamic Assets & URLs (7:02) Start
411. Useful Resources & Links (1:00) Start

Section: A Basic Introduction to Unit Testing in Angular Apps

412. Introduction (1:18) Start
413. Why Unit Tests? (2:12) Start
414. Analyzing the Testing Setup (as created by the CLI) (8:01) Start
415. Running Tests (with the CLI) (1:59) Start
416. Adding a Component and some fitting Tests (6:14) Start
417. Testing Dependencies: Components and Services (6:55) Start
418. Simulating Async Tasks (9:41) Start
419. Using "fakeAsync" and "tick" (2:14) Start
420. Isolated vs Non-Isolated Tests (6:10) Start
421. Useful Resources & Links (1:00) Start

Section: Angular as a Platform & Closer Look at the CLI

422. Module Introduction (1:44) Start
423. A Closer Look at "ng new" (5:18) Start
424. IDE & Project Setup (2:31) Start
425. Understanding the Config Files (9:01) Start
426. Important CLI Commands (5:25) Start
427. The "angular.json" File - A Closer Look (11:18) Start
428. Angular Schematics - An Introduction (1:41) Start
429. The "ng add" Command (4:31) Start
430. Using Custom "ng generate" Schematics (3:05) Start
431. Smooth Updating of Projects with "ng update" (2:14) Start
432. Simplified Deployment with "ng deploy" (5:46) Start
433. Understanding "Differential Loading" (5:10) Start
434. Managing Multiple Projects in One Folder (4:35) Start
435. Angular Libraries - An Introduction (2:51) Start
436. Wrap Up (1:27) Start

Section: Course Roundup

437. Roundup (1:33) Start

Course Instructor

Image

Maximilian Schwarzmüller

As a self-taught professional I really know the hard parts and the difficult topics when learning new or improving on already-known languages. This background and experience enable me to focus on the most relevant key concepts and topics. My track record of many 5-star rated courses, more than 1,000,000 students worldwide as well as a successful YouTube channel is the best proof for that.

The most rewarding experience for me is to see how people find new, better jobs, build awesome web applications, work on amazing projects or simply enjoy their hobby with the help of my content. That's why, together with Manuel Lorenz, I founded Academind to offer the best possible learning experience and to share the pleasure of learning with our students.