Example of Website: Wikipedia (only static content)
Example of Web Application: Facebook, Twitter
Nowadays, we see more complicated Web Applications that have so many things happening at a time. Facebook e.g has a lot going on in front-end.
Full fledged applications are being built right in the browser (e.g Pixlr, WeVideo etc)
What we see mostly nowadays are SPAs (Single Page Applications).
The application is loaded once and navigation to any other page does not seem like a page refresh however whole page gets changed.
A single-page application (SPA) is a web application that interacts with the user by dynamically rewriting the current page rather than loading entire new pages from a server.
jQuery is great. It transformed web development. It is still very useful.
However, its difficult to make complex applications in jQuery.
Every tech company whether its a startup or if its Apple, Facebook, Twitter, they are moving towards JavaScript Frameworks and Libraries (Angular, React.js, Vue.js)
Frontend Frameworks / Libraries
Angular, React.js, Vue.js, Svelte, Aurelia, Ember, AngularJS (Angular v1), Knockout etc
Angular is a full featured JavaScript framework created and maintained by Google and is used for building front-end applications.
Angular is a JavaScript framework to build more interactive web apps. It is designed for both Web, Desktop and Mobile platforms.
While, we create apps using HTML, CSS and Javascript, Angular requires us to know Typescript (a typed superset of Javascript that scales), kind of stricter version of Javascript provided with OOP features.
Angular is very popular in large enterprise.
AngularJS !== Angular 2/4/5/6/7/8/9/10
AngularJS was released in 2010. Its architecture is very different from Angular 2 onwards.
Angular 2/4/5/6/7/8/9/10+ are not much different. They mostly have under the hood changes to make angular faster and smaller in size.
Angular is an all-in-one solution
(Routing/HTTP/Forms/Services/RxJS). Angular provides so much out of the box (Directives, Pipes etc)
React.js is just a library. In order to to build complete front-end applications, you need to use react-router (router), formik (forms), redux/mobx (state management).
Vue.js would also require vue-router and vuex.
Provides modular concept which helps for code reuse and easier scaling of architecture.
Angular Reactive Forms are a breeze to work with. (My personal favorite reason)
Angular uses TypeScript by default.
TypeScript is an open-sourced programming language developed and maintained by Microsoft.
Typescript is a super-set of JavaScript that compiles to plain JavaScript. Superset (anything u can do in JS, you can also do in typescript) and adds some extra features.
TypeScript is modern JavaScript (ES6,ES7+) + types. It's about catching bugs early and making you a more efficient developer.
JavaScript is dynamically typed / untyped. This means JavaScript does not know what type a variable is until it is actually instantiated at run-time. This means we do not have to assign types to variables like in Java.
TypeScript is designed for large codebases.
TypeScript syntax is closer to Java/C#.
For quick testing Angular in the browser, head over to stackblitz.com or codesandbox.io
To run it on your computer, you need a few pre-requisites
Components are like building blocks of a program. Think of components as blocks. You join many blocks together to build a house.
Sometimes you use same blocks/components in different areas of the house.
A Component in Angular has its own css file (optional), html file and a .ts (typescript file).
@Component is a TypeScript Decorator. It provides
meta data. E.g Selector, html file, css file.
Directive is a component without its html or css.
Directives are very powerful as they help you change functionality of the DOM/View depending on your requirements.
Angular provides few built-in directives (*ngFor, *ngIf). However, we can also create directives ourself.
There are three main types of directives in Angular:
Component - directive with a template. (yes components are a directive)
Attribute directives - directives that change the behavior of a component or element but don't affect the template. E.g ngClass, ngStyle
Structural directives - directives that change the behavior of a component or element by affecting how the template is rendered . E.g *ngIf, *ngFor
Pipes provides a new way of filtering data.
There are many built-in pipes like currency, date etc. However, just like Directives, we can create them according to our requirements.
Pipes only filter data but don’t actually change the value.
A template helps us to render HTML with some dynamic parts depending on our data.
{{ }} for interpolation.
[] for property binding.
() for event binding.
# for variable declaration.
* for structural directives.
Interpolation allows you to incorporate calculated strings into the text between HTML element tags and within attribute assignments. E.g {{ amount }} or {{ 2+4 }}. It can also include a JS expression
Generate a new component
Generate a new service
Backend could be any of Node.js, Python, Go, .Net
Backend services can have a REST API set up with GET / POST methods.
Angular can make API calls using built-in HTTP Client, fetch data and display it in the browser.
Angular provides Services through which we can easily do GET and POST.
Example of live API service:
https://jsonplaceholder.typicode.com/users
or
https://random-quotes.now.sh/
If you have local project, it could be localhost:3000 or wherever your server is running.
Deploying Angular to production is very straightforward.
just run command
It will create a dist folder inside the root directory. Angular CLI creates static files for us.
Now there are various ways we can deploy it.
You can create a small server separately for your front-end.
You can integrate in your existing backend server very easily as well. Just give it the path to dist folder.
However, we are going to see an even cooler way. We will deploy it live by just a few clicks and commands that's it.
We will use an online static hoster. It offers many other features as well which we will see.
There are many free ones e.g Firebase, Vercel (previously now.sh), Netlify, Surge.sh. They are all free for static websites meaning totally free for your angular application.
We will use Vercel.
Step 1: Create repository on Github
Step 2: Push code to Github
Step 3: Signup on Vercel
Step 4: Copy/paste your repository url.
Step 5: Vercel automatically detects the Angular Repository. Click Deploy
Step 6: Site Published. HTTPS already added.
I would recommend you guys to start. If you get stuck anywhere, you can always send me a message on Slack/Skype/Email.
If this was helpful for you, we could arrange further sessions where we could go deeper in Angular/Node.js