Description
In this 5-day course, students will start with an optional review of advanced JavaScript, followed by the fundamental concepts and structures of Vue.js development. Students will use Vue.js to build a real-world frontend application through a series of hands-on labs.
In the 2nd part of the course, students will learn the fundamentals using Node and Express to build an API for the Vue frontend application using a MongoDB database.
Students will then connect the Vue frontend with the Node.js backend.
TARGET AUDIENCE
This course is designed for experienced front-end web developers who wish to begin using Vue and Node.
OBJECTIVES
After taking this course, students will be able to:
- Install, configure, and use modern web tooling
 - Create test suites for Vue
 - Understand what Vue.js is and what problem it solves
 - Know the basic architecture of a Vue.js application
 - Build a Single Page Application with Vue Router
 - Use Pinia for maintaining state in a Vue.js application
 - Use Vue best practices
 - Know how to code web applications and RESTful APIs with Node.js
 - Connect Node.js to MongoDB
 
TOPICS
- Modern JavaScript tooling
 - Debugging JavaScript
 - Object-oriented JavaScript
 - All the basic Vue capabilities and features
 - Communication between components
 - Data binding
 - Communication with the server via Ajax
 - State management with Vuex
 - Creating SPAs with Vue
 - Asynchronous JavaScript – promises, async/await (time permitting)
 - Animation and Transitions in Vue (time permitting)
 - Fundamentals of Node.js
 - Using Express to build web applications and APIs
 - MongoDB
 
Prerequisites
Before taking this course, students should have solid experience with HTML5, CSS3, and JavaScript
Duration
Five days
OUTLINE
- Basic JavaScript (optional)
- How JavaScript Works
 - JavaScript Syntax
 - JavaScript Data Types
 - JavaScript Primitives
 - Variables and Arrays
- Creating and Using Variables
 
 - Variable Scoping with const and let
- Creating and Using Arrays
 
 - JavaScript Operators
 - Template Literals
 - Functions
 - Arrow Functions
 - JavaScript Objects
 - Prototypal Inheritance
 
 - Advanced JavaScript (optional)
- Default Parameter Handling
 - Rest Parameter
 - Spread Operator
 - Tagged Template Literals
 - Enhanced Object Properties
 - Property Shorthand
 - Method notation
 - Array Matching
 - Object Matching
 - Symbol Primitive
 - For-Of Operator
 - Creating and Consuming Generator Functions
 - Class Definition
 - Class Inheritance
 - Understanding this
 - map()
 - filter()
 - reduce()
 - Promises
 - Async / Await
 
 - TypeScript Basics
 - Vue QuickStart
- What is Vue.js?
 - Vue vs React and Angular
 - Virtual DOM
 - What’s New in Vue 3
 - Two ways to write Vue Components
- Options API
 - Composition API
 
 - Code Editors and IDEs
 - Volar extension
 - Lab 01: Vue 3 Quick Start
 - Lab 02: Your First Component
 - Lab 03: Create More Components
 - Lab 04: Testing Vue
 - Lab 05: Manual In-Browser Testing and Debugging
 - Getting Started With Vue.Js
 - Basic Vue.Js Features
 - Creating and Mounting a Vue App
 - Configuring an App
 - Which Style Should You Use?
 - Vue Templates
- Using HTML in Templates
 - Using JavaScript in Templates
 
 - js Directives
- Directive Arguments
 - Directive Modifiers
 - Vue.js Default Directives
 - Custom Directives
 
 - Loops and Lists
- Using key
 - Using v-for
 - v-for with Arrays
 - v-for with Objects
 
 - Conditional Rendering
- v-if vs. v-show
 
 - Lab 06: Static Version
 - Using Filters
- Formatting Currencies with Filters
 - Formatting Dates with Filters
 
 - Binding HTML Classes
 - Adding Styles Conditionally
 - Binding Styles
 - Lab 07: Styling Vue Components
 - Computed Properties
- Benefits of Computed Properties
 - Filtering / Sorting a List with a Computed Property
 - Using Setters in Computed Properties
 - Lab 08: Computed Properties
 
 - Vue State
- Vue Instance’s data object
 - ref() and reactive()
 - Using ref()
 - Using reactive()
 - Vue.js Data Binding
 - v-bind directive
 - Value Binding
 - 2-way Binding
 - v-model directive
 - Mutating Arrays
 - Array Mutations Vue Can’t Detect
 - Object Mutuation Vue Can’t Detect
 - v-bind shorthand
 
 - Vue with TypeScript
- Lab 09: Methods and State + TypeScript
 
 - Event Handling
- Inline Event Handling
 - Event Handling with Methods
 - Event Modifiers
 - v-on shorthand
 - Listening to Child Component Events
 - Emitting a Value With an Event
 - Lab 10: Events
 
 -  Watchers
- Async Operations with Watchers
 
 - Vue Instance Lifecycle
- Using Lifecycle Hooks
 - Lab 11: Component Lifecycle
 
 - Vue and Forms
- Input Bindings
 - 2-way Binding Pros and Cons
 - Creating a Form with Checkboxes
 - Creating a Form with Radio Buttons
 - Creating a Form with a Select Element
 - Input Modifiers
 - Lab 12: Forms
 
 - Vue Components
- What are Vue Components?
 - Creating a Component
 - Organizing and Reusing Components
 - Naming Components
 - Global Components
 - Local Components
 - Global vs. Local
 - Passing Data
 - Using Props
 - Single Root Element
 - Using v-model on Components
 - v-model and components
 
 - Content Distribution with Slots
- Lab 13: Slots
 
 - Loading Your Components Asynchronously
 - Lab 14: Composition API
 - Introducing Pinia
- Defining a Store
 - Pinia Store Example with Options
 - Pinia Store Example with Composition
 - State
 - Getters
 - Actions
 - Lab 15: Pinia
 
 - Single-Page Applications
- Creating an SPA with Vue-Router
 - Vue-Router Template
 
 - Vue-Router JS
 - Lab 16: Routing
 - Lab 17: AJAX with Pinia
 - Transitions and Animations
- Custom Transition Classes
 - Optional Lab: Transitions and Animation
 
 - Intro to Node.js
- What is Node.js?
 - How Does Node.js Work?
 - Blocking code
 - Non-Blocking code
 - V8 JavaScript Engine
 - Node’s REPL
 - Running a Node.js program
 - Lab 18: Basic Setup
 - Callbacks
 - Modules Overview
 - CommonJS Example
 - Using Modules
 - Modules vs. Packages
 - Sources of Modules
 - Node’s Core Modules
 - Buffer Objects
 - Modularizing Your Code
 - Returning Values from Modules
 - Using a Local Module
 - Optional Lab: Creating Modules
 - ES6 Modules
 - events and Streams
 - Non-blocking with Events
 - Events
 - Node Stream Objects
- Using Readable Streams
 - Using Writable Streams
 
 
 - Other Streams
 - Optional Lab: Working with Streams
 - The pipe method
- Optional Lab: Piping Between Streams
 
 - The process Object
 - Command Line Arguments
- Optional Lab: The process object
 
 - Understanding Callbacks
 - Using Node’s Error Convention
 - Node on the Web
- How the Web Works
 - HTTP
 - HTTP Methods
 - RESTful Web Services
 
 - Using Express
- What is Express?
 - Getting Started with Express
 - Routing with Express
 - Serve Static Content with Express
 - Route Methods
 - Lab 19: Routing
 - Lab 20: More Routing
 - Express Middleware
 - Creating Endpoints
 - Using the next object
 - The res object
 - Route Parameters
 - Lab 21: The req and res Objects
 - Lab 22: Implementing the GET method
 - Lab 23: Implementing the POST method
 - Lab 24: Implementing the DELETE method
 - Lab 25: Implementing the PUT method
 - Lab 26: Middleware
 
 - Database Access with Node.js
- Using an Object Data Model (ODM) or an Object Relational Model (ORM).
 - Mongoose
 - mongod and mongo
 - Lab 27: Vue and Mongo
 
 
 






