Vue JS - The Complete Guide (incl. Vue Router & Vuex)
4.7 (39,725 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
132,101 students enrolled

Vue JS - The Complete Guide (incl. Vue Router & Vuex)

Vue.js is an awesome JavaScript Framework for building Frontend Applications! VueJS mixes the Best of Angular + React!
4.7 (39,754 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
132,101 students enrolled
Last updated 8/2020
English, French [Auto], 9 more
  • German [Auto]
  • Indonesian [Auto]
  • Italian [Auto]
  • Japanese [Auto]
  • Polish [Auto]
  • Portuguese [Auto]
  • Romanian [Auto]
  • Spanish [Auto]
  • Turkish [Auto]
Current price: $132.99 Original price: $189.99 Discount: 30% off
5 hours left at this price!
30-Day Money-Back Guarantee
This course includes
  • 21.5 hours on-demand video
  • 49 articles
  • 113 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Assignments
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • Build amazing Vue.js Applications - all the Way from Small and Simple Ones up to Large Enterprise-level Ones
  • Understand the Theory behind Vue.js and use it in Real Projects
  • Leverage Vue.js in both Multi- and Single-Page-Applications (MPAs and SPAs)
Course content
Expand all 401 lectures 21:51:36
+ Getting Started
8 lectures 20:15

Welcome to this course! Let me introduce myself and give you a first overview of the course content!

Preview 03:08

Learning alone is absolutely fine but finding learning partners might be a nice thing, too. Our learning community is a great place to learn and grow together - of course it's 100% free and optional!

Join our Online Learning Community

We know the WHAT and WHY - now let's jump right into it! This lecture shows how to get started with VueJS and create first simple App with it.

Preview 04:45

Let's extend our first little Application a bit and add more features to it.

Preview 04:12

We created our first Application - what else does this Course offer? You'll learn in this video!

Preview 03:44

There are a couple of Resources you can use throughout this Course - learn more about them in this lecture.

Preview 01:55

Don't want to use JSFiddle? No problem, you can follow along with a local setup as well!

Setup VueJS Locally
Module Resources & Useful Links
+ Using VueJS to Interact with the DOM
27 lectures 01:03:28

Let me give you a brief introduction to this module.

Module Introduction

It's key to understand HOW VueJS interacts with the DOM. It does so, by using Templates. This lecture explores how this basic connection works and how you can use it.

Understanding VueJS Templates

VueJS apps have this strong connection between your templates ("the DOM") and your business logic. The latter resides in the Vue Instance. This lecture therefore explores both.

How the VueJS Template Syntax and Instance Work Together

It's key to understand how you may access data in the Vue Instance. It actually proxies all the properties you set up in the data property. But let's dive deeper into this topic, in this lecture.

Accessing Data in the Vue Instance

So far, we always used String Interpolation. That doesn't work if we want to bind to any element attributes (like <img src="...">). This lecture therefore explores our alternatives.

Binding to Attributes

Directives are another powerful feature, VueJS offers us. This lecture explains what Directives are and how you may use some of the built-in ones.

Understanding and Using Directives

Normally you want your page content to be updated by VueJS. But if you don't want that, v-once is a handy directive to suppress this functionality. Learn more, in this video.

Disable Re-Rendering with v-once

Did you already try to output HTML code (instead of plain text)? That probably won't work with normal String Interpolation! But no worries, there is a way to still output HTML - this lectures shows you how.

How to Output Raw HTML
Optional: Assignment Starting Code
Broken Udemy Download Links
You learned a lot about the VueJS 2 Template Syntax and how you may output Data to your template, hence rendering it on the page. Time to practice this in this first Assignment!
Time to Practice - Outputting Data to Templates
1 question

So far we learned how to output data. That's nice. But in a real application, you'll also want to listen to User/ DOM Events. VueJS has a Directive for that and this video explains how it works.

Listening to Events

It's nice to be able to listen to an Event but maybe you also want to use the Event Data? Nothing easier than that, let this lecture explain how to access the Event Data!

Getting Event Data from the Event Object

Not satisfied with the default Event Object you get supplied by the DOM/ JavaScript? You can also pass your own Data - learn more in this lecture!

Passing your own Arguments with Events

Sometimes you want to change the default behavior of an Event. VueJS offers you Event Modifiers as a nice Tool to achieve that.

Modifying an Event - with Event Modifiers

You want to listen to a specific Key being pressed? VueJS makes that easy - with Key Modifiers. Learn more, in this lecture!

Listening to Keyboard Events
More important Steps towards mastering VueJS Template Syntax have been taken. Time to use all the new Knowledge about how to use Events in a VueJS Application!
Time to Practice - Events
1 question

You're not limited to outputting properties or calling methods in your templates. You may also run (simple) JavaScript code there as this Lecture will show you.

Writing JavaScript Code in the Templates

We all know it since Angular (1), VueJS also has it. Whilst the standard flow of data is unidirectional, you may also use Two-Way-Binding and this lectures dives into how to do that.

Using Two-Way-Binding

Not all properties you use are static or updated manually. Some need to react to changes of other properties. Computed properties are there to help! Learn how to use them, in this video!

Reacting to Changes with Computed Properties

Computed Properties should be your preferred choice, but sometimes you want to execute some specific code when one part of your application changes. You can Watch for such changes, this lecture explores how that works.

An Alternative to Computed Properties: Watching for Changes

We covered a lot of the basics until now. We repeatedly used v-bind and v-on for that. Well, we can save some time there - and this lecture shows how.

Saving Time with Shorthands
In the last Lectures, you learned a lot about how VueJS handles Reactivity. Time to put this to Practice and do some Exercises on it!
Time to Practice - Reactive Properties
1 question

Often times, you not only want to change the data you print to the screen, but also some styling. Well you can do that as this lecture will show.

Dynamic Styling with CSS Classes - Basics

Now that we covered the basics about using CSS Classes dynamically, it's time to dive deeper and understand how else we may use that feature.

Dynamic Styling with CSS Classes - Using Objects

Let's finish the short trip in the world of dynamic CSS Classes by having a look at some other tools we can use in conjunction with them.

Dynamic Styling with CSS Classes - Using Names

So far, we learned how to style elements dynamically when using CSS Classes. Maybe you don't want to use CSS Classes though. This lecture explores how you may directly manipulate the Styling of an element.

Setting Styles Dynamically (without CSS Classes)

As with CSS Classes, we can also use the Array Syntax to apply custom Styles directly to elements. Have a look at this lecture to learn more about it.

Styling Elements with the Array Syntax
A lot has been covered in this Course Module. In the last Lectures, you learned how you may dynamically change the CSS Classes and Styles of Elements. Time to Practice this in this Assignment!
Time to Practice - Styling
1 question

Let me summarize and wrap up this module for you.

Module Wrap Up

This lecture contains all the JSFiddle Links used in this Module as well as some other useful links for you to dive deeper.

Module Resources & Useful Links
+ Using Conditionals and Rendering Lists
13 lectures 24:00

Let me introduce you to this Module.

Module Introduction

Sometimes you don't want to display certain parts of your DOM at all times. Sometimes a specific condition should control that. VueJS makes that easy by offering you the v-if directive. Learn more about it, in this video!

Conditional Rendering with v-if
v-else-if in Vue.js 2.1

v-if can be used with two slightly different Syntaxes. Let's have a look at the alternative in this lecture.

Using an Alternative v-if Syntax

v-if attaches and detaches elements to/ from the DOM. Sometimes you only want to set the CSS display property to "none" though. v-show is the tool you want to choose for that task!

Don't Detach it with v-show

A common task is to output an array of data. How do you do that with VueJS? It's very easy, let's explore it in this lecture.

Rendering Lists with v-for

What if you not only want to loop through all your items but also need the Index of the current iteration? VueJS got you covered as this lecture will show you.

Getting the Current Index

As with v-if, we can use a different Syntax with v-for. Let's take a closer look in this lecture.

Using an Alternative v-for Syntax

What if your data source isn't an array but a JavaScript object? You may still use v-for as this lecture will explain.

Looping through Objects

What if you only want to loop through all numbers from 1 to n? Do you need to create a new array for that? No, as this lecture shows, VueJS offers a shortcut for such a task.

Looping through a List of Numbers

In some cases, VueJS needs to keep track of the Elements you're rendering with v-for. You can therefore assign keys, this lecture shows you how.

Keeping Track of Elements when using v-for
Conditionals and Lists are key features of VueJS and constructs you'll probably use in every VueJS app. Time to practice them.
Time to Practice - Conditionals & Lists
1 question

Let me summarize and wrap up this module.

Module Wrap Up

This lecture contains all the JSFiddle Links used in this Module as well as some other useful links for you to dive deeper.

Module Resources & Useful Links
+ First Course Project - The Monster Slayer
16 lectures 43:19

Let me introduce you to this Course Project and challenge you to build it on your own before seeing me build it!

Introduction & Challenge

Before writing any code, we need to set up the Course Project. I'll do that in this lecture.

Setting up the Course Project

Let's start by setting up the Vue Instance and start working on the basic interface. The Healthbars make for a good start, so let's start on that.

Creating the Vue Instance and Styling the Healthbars

We got a lot of buttons to press, but not all buttons should be pressable at all times. So let's use our knowledge about Conditionals to control this.

Showing the Player Controls Conditionally

Time to start working on those methods, such that the buttons actually do things. A good start is to allow the user to actually start a new game. This lecture shows my solution on this.

Implementing a "Start Game" Method

The game has started, that is great. But now it would be very useful if we could do more than just watch it. So let's add an additional method - one which allows us (the player) to attack.

Implementing a "Attack" Method

Whilst creating applications, you're going to face the point of time where your code isn't optimal anymore. In such a case, you should consider refactoring. This lecture dives into that.

Write better Code - Time for Refactoring!

After refactoring, let's continue working on our base mechanics of this game. Time to add an additional action the user can execute!

Implementing a "Special Attack"

On we go, time to allow the player to heal himself.

Implementing a "Heal" Method

We got a couple of actions now, time to finish these buttons and make them all work as intended.

Finishing the Action Buttons

We got plenty of actions happening during our game. It's hard to keep track but thankfully we learnt how to store data in lists and then output such lists. So let's have a look at this, in this lecture.

Creating an Action Log

Time to output the Log we created in the last lecture. We learnt about a very useful directive to do that. Do you remember?

Printing the Log (v-for)

Time for some final touches to make the log work as intended!

Finishing the Log

Right now, it's hard to tell which action comes from a user and which comes from the monster. Let's use our knowledge about dynamic CSS classes to change this!

Styling the Log Conditionally

We finished the Application! Let me wrap up what we achieved in this Module!

Wrap Up
Full Application Code
+ Understanding the VueJS Instance
16 lectures 53:30

Let me introduce you to this module.

Module Introduction

I already dived into some of the basics of the VueJS instance in the other modules. Let me summarize some core things you need to know about it.

Some Basics about the VueJS Instance

So far, we only used one Vue Instance. But you're not limited to that! This lecture explores how you may use multiple Vue Instances in your app.

Using Multiple Vue Instances

We only used the Vue Instance from inside of it - that means, we only used its data, methods etc. inside of the Instance. You can also access these things from outside as this video will show.

Accessing the Vue Instance from Outside

Isn't that interesting, that we're able to access properties etc. from outside - directly on the Instance itself? This video explains how VueJS does that.

How VueJS manages your Data and Methods

We already learned about $el and $data, but as these two properties are so important, let's dive deeper into them in this lecture.

A Closer Look at $el and $data

Sometimes you want direct access to certain elements in your Template. VueJS can do that for you, all you need are some $refs. Learn more about that concept in this video!

Placing $refs and Using them on your Templates

We covered a lot, but it's pointless to cover every single option and method VueJS offers you. But you certainly need to know where to look for it! This video shows it.

Where to learn more about the Vue API

Until now, we always used "el" to get a Template. There are other options as this video shows.

Mounting a Template

No worries, I got a whole section on Components, but here's a great place to get started with them and understand why a component-driven approach might make sense!

Using Components

VueJS gives you different ways of using Templates, some of them have limitation as this video will teach you.

Limitations of some Templates

Did you ever wonder how VueJS knows when to update what? And how it does that in a high-performance way? That video explores this question.

How VueJS Updates the DOM

Each Instance (and Component) in VueJS follows a certain lifecycle with events you can tap in to run your code. This lecture explains this lifecycle and which hooks you may use when.

The VueJS Instance Lifecycle

Let's have a closer look at this VueJS Instance Lifecycle and see all the hooks in action.

The VueJS Instance Lifecycle in Practice

Let me wrap up and summarize this module.

Module Wrap Up
Module Resources & Useful Links
+ Moving to a "Real" Development Workflow with Webpack and Vue CLI
12 lectures 29:45

Let me introduce you to this Course Module.

Module Introduction

Until now we used a simple local setup or JSFiddle. I'd argue that we want a better setup, including a local development server (which runs our app). Why? This video explains it!

Why do we need a Development Server?

Why do we need a Development Workflow? And what is that to begin with? This lecture explains it!

What does "Development Workflow" mean?

VueJS also has its own CLI. That CLI doesn't have super-many features, but it has one major one: It allows us to quickly create a new Vue Projects from a couple of prepared templates.

Using the Vue CLI to create Projects

Time to use the CLI! For that, we'll first install it (and learn its prerequisites) before we dive into our first project!

Installing the Vue CLI and Creating a new Project

We chose the simple Webpack template - a great template for starter Projects (though also useable for bigger ones!). Let's have a look at all the folders and files which were created by the CLI.

An Overview over the Webpack Template Folder Structure

Do you notice these strange ".vue" files? What are they? How do they work? This video takes a closer look.

Understanding ".vue" Files

There is an Object in the ".vue" File - let's have a closer look at it in this lecture.

Understanding the Object in the Vue File

Having a Development Workflow/ Build Process is great, but in the end, you probably want to deploy it. For that, the Template we use also has a Production Workflow. This video shows how to use that.

How to Build your App for Production

Let me summarize and wrap up this Module.

Module Wrap Up

Want to learn more about ".vue" Files and the CLI? Here's the right place!

More about ".vue" Files and the CLI

It's going to happen at some time: Your app doesn't behave the way it should behave. In such a case, debugging it is the thing you want to do. Let's learn how that works in your VueJS project (created with CLI).

Debugging VueJS Projects
+ An Introduction to Components
14 lectures 39:52

Let me introduce you to this course module on Components.

Module Introduction

The title says it all: Time to understand what Components are, how they work and how you can use them.

An Introduction to Components

Components extend the VueJS Instance. Therefore, they share the same fields (like "methods", "computed" etc.). There's one important difference regarding the "data" field though. This lecture explains which difference that is.

Storing Data in Components with the Data Method

You can register Components either on application-level or locally in a specific component. This lecture explains both approaches and which differences you should take into account.

Registering Components Locally and Globally

You probably noticed, that we always have the App.vue file in our setup. What's this Object in this file all about? This lecture explains it.

The "Root Component" in the App.vue File

Finally! It's time to create a new Component on our own. This lectures teaches you how that works.

Creating a Component

We created a new Component, now how do we use it? This lecture dives into that question and shows how to use the Component.

Using Components
Components are an extremely useful and versatile feature of VueJS. In this Assignment, you can test your knowledge and practice the things you learned about them.
Time to Practice - Components
1 question

Find the source code of the solution attached to this module.

Time to Practice - Components (Code)

Right now, our Folder Structure isn't very good. It's quickly getting crowded and we certainly don't even want to think about building a more complex application with such a structure! Time to change that - in this video.

Moving to a Better Folder Structure
Alternative Folder Structures

If you're using .vue files, you're pretty free regarding the choice of your component selectors/ tags. So what are good names? This lecture explains some things you might want to take into consideration.

How to Name your Component Tags (Selectors)

When using .vue files, you can scope the styles of that file to the component contained in that file. Sounds awesome? It is - let's learn more in this video!

Scoping Component Styles

Let me wrap up and summarize this module.

Module Wrap Up
Module Resources & Useful Links
+ Communicating between Components
15 lectures 38:41

Let me introduce you to this course module.

Module Introduction

Let's first understand which problem we actually need to fix before diving into the solutions. This lecture sets up a simple projects and shows what our goal is.

Communication Problems

One of the most common forms of passing data is to use "props". "props" are used to pass data from a parent to a child component. Learn more about it in this lecture.

Using Props for Parent => Child Communication

How can and should you name your props? Let's have a look at this question in this lecture.

Naming "props"

We're able to pass "props". Great! Now let's understand how may use them in the receiving (child) component.

Using "props" in the Child Component

In most cases, we can't work with any random type of prop. We expect a string, number or whatever we need. For that, we can set up "props" validation. This lecture explores how that works.

Validating "props"

We could use "props" to pass data from the parent to the child component. What if we want to do it the other way around? That's also possible, though not with "props". Learn which other option you have, with this module.

Using Custom Events for Child => Parent Communication

To understand when to use "props" and when to use custom events, it's key to understand how data flows in a VueJS app. This lectures explores this a little bit more.

Understanding Unidirectional Data Flow

An alternative to custom events would be callback functions you pass as "props" from parent to child component. Learn more about this alternative in this lecture.

Communicating with Callback Functions

So far we only looked at parent<=>child relations. What if we got two (or more) sibling components which want to talk with each other? Let's explore one way of enabling this in this lecture.

Communication between Sibling Components

Building chains of "props" and events can quickly become cumbersome. Fortunately, there's an alternative: Using an Event Bus. Learn more about that in this lecture.

Using an Event Bus for Communication

We learned about the Event Bus, let's now dive a little deeper and see what else we can do with it.

Centralizing Code in an Event Bus
Being able to create Components is great, but having them communicate with each other is extremely important, too. This Assignment allows you to practice just that!
Time to Practice - Component Communication
1 question

Find the Exercise Solution Code attached!

Time to Practice - Component Communication (Code)

Let me wrap up and summarize this module.

Wrap Up
Module Resources & Useful Links
+ Advanced Component Usage
16 lectures 26:51

Let me introduce you to this course module on advanced component usage.

Module Introduction

In order to show some advanced component concepts, we'll need a tiny project to work with. Let's set it up in this lecture.

Setting up the Module Project

What if you wanted to pass more complex content from a Parent to a Child component? Let's first have a look at a suboptimal solution.

Passing Content - The Suboptimal Solution

For passing (HTML) content from a Parent to a Child Component, VueJS offers a concept called "Slots". Let's explore this concept in this lecture.

Passing Content with Slots

When passing and distributing Content via Slots, the question is: Which Styles do apply and where does the Content get compiled? Let's dive into these questions now.

How Slot Content gets Compiled and Styled

Styling slots now works differently - a bit.

Changed Slot Styling Behavior

Sometimes you really want the highest amount of control over how and where your Content should be displayed in the receiving Component. Named Slots help you with this as this lecture will explain.

Using Multiple Slots (Named Slots)

When using Slots, VueJS has some Default assumptions - learn more about them in this lecture.

Default Slots and Slot Defaults

Time to sum up the things we learned about Slots in this module thus far.

A Summary on Slots

What if you had an Application where you had multiple Components displayed conditionally in the same place? VueJS has a concept called "Dynamic Components" which should help you with that!

Switching Multiple Components with Dynamic Components

When using Dynamic Components, it's key to understand how they behave and should be used. This lecture dives into this.

Understanding Dynamic Component Behavior

What happens to Dynamic Components which are currently not rendered? This lecture explores this question and shows a way to change the default behavior.

Keeping Dynamic Components Alive

Due to their dynamic nature, Dynamic Components ship with some extra Lifecycle hook - let's dive deeper in this lecture.

Dynamic Component Lifecycle Hooks
You learned a lot about Components! Now it's time to also take that advanced knowledge and challenge yourself in this assignment.
Time to Practice - Slots and Dynamic Components
1 question
Time to Practice - Slots and Dynamic Components (Code)

Let me wrap this module up.

Wrap Up
Module Resources & Helpful Links
+ Second Course Project - Wonderful Quotes
12 lectures 29:15

Let me introduce you to this course module and the Application we're going to build here!

Module Introduction

Let's start by setting up the base Project we're going to use throughout this module.

Setting up the Project

Now that the Project is set up, it's time to initialize the VueJS Application - let's do this in this lecture.

Initializing the Application

What will our Application certainly need? Components! So let's set them up in this lecture!

Creating the Application Components

Time to use the things we learned about passing data - by adding Slots and Props to our Application.

Passing Data with Props and Slots

Displaying Quotes is nice, but we certainly want to be able to add new ones. This lecture dives into this.

Allowing Users to Create Quotes with a NewQuote Component

How do we inform our App that a new Quote was added? Well, a Custom Event sounds like a good idea, so let's add this functionality to the App.

Adding Quotes with Custom Events

Not the most important part of the Application, but hey - let's display a Info Box!

Adding a Info Box

Adding and viewing Quotes is a great thing, but sometimes we want to get rid of Quotes. This lecture dives into this topic.

Allowing for Quote Deletion

Our App has a Quote Limitation. Time to add a visual display of it.

Controlling Quotes with a Progress Bar

Time to finish the App and control the Application State!

Finishing Touches and State Management
Module Resources
  • Basic JavaScript Knowledge is Required
  • ES6 Knowledge is a Plus but not a Must
  • Basic HTML and CSS Knowledge is assumed throughout the Course

Hear what students are saying about the course:

He knows how to teach. Splits every details into smaller parts and makes another video for each part. For this reason you don't feel yourself boring while watching videos because lots of them about 2-3 mins not more. One of the best teachers in Udemy that I saw.

The instructor uses an easy-to-follow approach that builds knowledge easily and incrementally.

Very well laid out tutorials that are easy to follow but also run at a pace that doesn't get boring.

About the course

No matter at which Metric you look at (Google Trends, Github Stars, Tweets ...) VueJS is the Shooting Star in the World of JavaScript Frameworks - it simply is amazing!

Frontend Frameworks are extremely popular because they give us this reactive, great User Experience we know from Mobile Apps - but now in the Browser! No wonder that Jobs requiring Frontend Framework Skills like VueJS are amongst the best paid ones in the Industry!

You may know Angular 2 and ReactJS, well, VueJS combines the Best of both Frameworks and makes building anything from small Widgets to big, Enterprise-Level Apps a Breeze and a whole lot of Fun! And if you don't know the two mentioned Frameworks: That's fine, too, this Course does not expect any knowledge of any other Frontend Framework - you will learn it all throughout this Course!

### This Course covers it all! ###

We'll start at the very Basics, what Vue.js is and how it works before we move on to more Complex and Advanced Topics but I'll be honest: It's too much to fit it all into one Sentence, so here's what you'll learn in this Course:

  • What is VueJS and Why would you use it?

  • Setting up a Development Environment and Workflow

  • The Basics (including the basic Syntax, Understanding Templates and much more!)

  • Interacting with DOM (Rendering Lists, Conditionally attaching/ detaching Elements ...)

  • Using Components (and what Components are to begin with)

  • Binding to Form Inputs

  • All about DirectivesFilters and Mixins

  • How to make your App more Beautiful with Animations and Transitions

  • How to create an awesome Single-Page-Application (SPA) with Routing

  • How to improve State Management by using Vuex

  • How to Deploy the App

  • And much more ...

And all the accompanied with many Exercises and multiple Course Projects - because it isn't just about seeing Code, it's about using and practicing it!

### Is this Course for you? ###

Now that you know what this Course is about, let's see if this Course is for you!

Here are three Types of Students who will love this Course:

Student #1:

Has some JavaScript Experience and is interested in what this Language can do. He heard and read that JavaScript allows you to create nice Web Applications and enhance existing Web Pages. VueJS is your choice!

Student #2:

He already has some Experience with other Frontend Frameworks like Angular (2+) or ReactJS. But either due to interest or disappointment of the existing Frameworks, he seeks some Alternatives - VueJS might be what you were looking for! 

Student #3:

Has Experience with backend Frameworks/ Languages but now also wants to enter the Frontend World. VueJS is an awesome choice here, it's fun, it uses native JS and it's extremely powerful!

Bonus: Student #4

Is disappointed by Angular 2+. Does a good Framework need 2 hours of setup? No, certainly not - as VueJS will prove to this Student!

Let's dive into VueJS right now!

Who this course is for:
  • This Course is for Everyone interested in Frontend Development and Major JavaScript Frameworks
  • This Course is for you if you want to create Reactive Applications, which run in the Browser
  • This Course also targets Students who prefer a native JavaScript Framework which makes Getting Started much simpler than Angular 2
  • Displeased with Angular 2? VueJS is for you!