Introduction
- Why Angular?
- Why Firebase?
- Why Angular and Firebase Together?
- This Book is for Developers Who…
- Note for Native Mobile Developers
- Angular Firebase Starter App
- Package Versions
- Watch the Videos
- Join the Angular Firebase Slack Team
The Basics
- 1.1 Top Ten Best Practices
- 1.2 Start a New App from Scratch
- 1.3 Separating Development and Production Environments
- 1.4 Importing Firebase Modules
- 1.5 Deployment to Firebase Hosting
Cloud Firestore
- 2.0 Cloud Firestore versus Realtime Database
- 2.1 Data Structuring
- Firestore Quick Start Video Lesson
- 2.2 Collection Retrieval
- What is a TypeScript interface?
- 2.3 Document Retrieval
- Inferring Documents vs. Collections
- 2.4 Include Document Ids with a Collection
- 2.5 Add a Document to Collections
- 2.6 Set, Update, and Delete a Document
- 2.7 Create References between Documents
- 2.8 Set a Consistent Timestamp
- 2.9 Use the GeoPoint Datatype
- 2.10 Atomic Writes
- 2.11 Order Collections
- 2.12 Limit and Offset Collections
- 2.13 Querying Collections with Where
- 2.14 Creating Indices
- 2.15 Backend Firestore Security Rules
- Firestore Rules do NOT Cascade
Realtime Database
- Injecting the AngularFire Database
- Would you rather use the Firestore database?
- 3.0 Migrating from AngularFire Version 4 to Version 5
- 3.1 Data Modeling
- Firebase NoSQL Data Modeling
- 3.2 Database Retrieval as an Object
- Build a Firebase CRUD App
- What is a TypeScript interface?
- 3.3 Show Object Data in HTML
- 3.4 Subscribe without the Async Pipe
- 3.5 Map Object Observables to New Values
- RxJS Quick Start Video Lesson
- 3.6 Create, Update, Delete a FirebaseObjectObservable data
- 3.7 Database Retrieval as a Collection
- RxJS Observable Naming Preferences
- 3.8 Viewing List Data in the Component HTML
- 3.9 Limiting Lists
- 3.10 Filter Lists by Value
- Never use orderByPrority
- 3.11 Create, Update, Delete Lists
- Obtain the Push Key on New Items
- 3.12 Catch Errors with Firebase Operations
- 3.13 Atomic Database Writes
- 3.14 Backend Database Rules
- Database Rules Video Lesson
- Common Pitfall - Cascading Rules
- 3.15 Backend Data Validation
- Difference between Write and Validate
User Authentication
- Injecting AngularFire Auth and Database
- 4.1 Getting Current User Data
- 4.2 OAuth Authentication
- OAuth Video
- 4.3 Anonymous Authentication
- Anonymous Auth Video
- 4.4 Email Password Authentication
- Full Code Example
- 4.5 Handle Password Reset
- 4.6 Catch Errors during Login
- 4.7 Log Users Out
- 4.8 Save Auth Data to the Realtime Database
- 4.9 Creating a User Profile
- 4.10 Auth Guards to Protect Routes
Firebase Cloud Storage
- 5.1 Creating an Upload Task
- File Storage DropZone
- Important Caveat
- 5.2 Handling the Upload Task
- 5.3 Saving Data about a file to the Realtime Database
- 5.4 Uploading a Single File
- 5.5 Delete Files
- 5.6 Validate Files on the Frontend
- 5.7 Upload Images in Base64 Format
- 5.8 Validating Files on the Backend
Firebase Cloud Functions
- 6.1 Initialize Cloud Functions in an Angular Project
- 6.2 Deploy Cloud Cloud Functions
- 6.3 Setup an HTTP Cloud Function
- 6.4 Setup an Auth Cloud Function
- 6.5 Setup a Database Cloud Function
- Choose the Reference Point Carefully
- 6.6 Setup a Firestore Cloud Function
- 6.7 Setup a Storage Cloud Function
Real World Combined Examples
- 7.1 Auth with Firestore Custom User Data
- 7.2 Role-based Access Control
- 7.3 Drag and Drop File Uploads
- 7.4 Firestore NoSQL Data Modeling
- 7.5 Server Side Rendering