Angular: Onze keuze voor Frontend Development
Tags: angular, frontend, programming
Published: 2023-03-20 21:23:43

_Bij het ontwikkelen van webapplicaties is het kiezen van het juiste frontend framework een kritische en belangrijke beslissing. In ons recente project, Neobyte CMS, kozen we voor Angular als frontend framework. In dit artikel bespreken we waarom. We verkennen onze ervaringen met Angular, vergelijken het met andere populaire frameworks, en delen onze bevindingen over de voordelen en uitdagingen._

## Waarom Angular ?

Om te bepalen welk frontend framework je het best kiest voor je project moet je rekening houden met een aantal factoren. Allereerst is het belangrijk om te kijken naar de functionaliteit die je nodig hebt voor je project en of het framework hierin voorziet. Daarnaast is het ook relevant om te kijken naar de grootte en de actieve community rondom het framework, omdat dit de toekomstige ondersteuning en ontwikkeling van het framework kan beïnvloeden. Ook is het handig om te kijken naar de leercurve van het framework en de beschikbaarheid van documentatie en ondersteuning.

### Alternatieven
Angular is een framework ontwikkeld en onderhouden door Google. Het is de meest volwassen technologie aangezien het bestaat sinds 2010. Angular gebruikt TypeScript, een geavanceerde versie van JavaScript. Typescript biedt statische typecontrole, wat de code kwaliteit en leesbaarheid verbetert en fouten opspoort vóór runtime, in tegenstelling tot dynamische typecontrole van JavaScript. Angular werkt ook met Javascript als je deze prefereert. Dit framework is zeer uitgebreid, dus als je er eenmaal mee gaat werken, heb je waarschijnlijk geen extra bibliotheken of tools nodig. Deze technologie is een perfecte keuze als je werkt aan grootschalige complexe projecten met rijke functionaliteit.

React werd in 2013 gecreëerd door het ontwikkelingsteam van Facebook als cross-platform software met behulp van JavaScript. React is geen framework, maar eerder een bibliotheek, dus deze oplossing is niet zo complex en zelfvoorzienend als Angular. Het maakt React echter flexibeler, omdat de ontwikkelaars zelf kunnen kiezen met welke tools en bibliotheken ze het aanvullen.

Vue is, net als Angular, gerelateerd aan Google - het is ontwikkeld door de ex-werknemer van het bedrijf, Evan You, en in eerste instantie uitgebracht in 2014. Het is een open-source JavaScript-framework voor het bouwen van gebruikersinterfaces. Deze oplossing is relatief nieuw. Vue is vrij lichtgewicht, maar het is ook niet zo complex als Angular. Vue is ideaal voor het bouwen van middelgrote en kleine weboplossingen en single-page applicaties.

Svelte is een ook een nieuwkomer, niet veel mensen gebruiken of kennen het. Denk aan React, Vue, of Angular in hun beginfase: dat is wat Svelte momenteel is. Svelte legt de nadruk op eenvoud en snelheid. Het werd in 2016 gecreëerd door een ontwikkelaar van New York Times, Rich Harris, om complexe grafieken en diagrammen op een performante manier af te handelen. Van daaruit groeide het uit tot een zeer geliefde concurrent voor React en Vue.

### Populariteit
**Google trends**

![Google Search Trends](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q84lqowt42stwixfenqx.PNG)
De afbeelding hierboven bevat de google zoek trends voor deze 4 frontend frameworks in de afgelopen 5 jaar. Zoals je kunt zien, wordt React veruit het meest gezocht met een stijgende lijn. Svelte is duidelijk het minst gezochte framework. 

**NPM trends**
![NPM downloads](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bahhwucpngpe71cgb3xn.PNG)
React is duidelijk het populairst in termen van NPM-pakketdownloads. Vue en Svelte hebben allebei hun piek momentje gehad. Dit is ook het moment waarin ze zijn opgenomen in de community. Angular hangt hierbij iets tussenin. Angular kan tevens ook met de Angular CLI geïnitialiseerd worden en is dus niet volledig afhankelijk van npm downloads. Dit verklaart hun lagere download cijfers.

**Wrap-up**

| | Angular | React | Vue | Svelte |
| ------- | ------- | ------- | ------- | ------- |
| Type |  Framework | Library | Library | Framework |
| Release Date | 2010 | 2013 | 2014 | 2016 |
| Founder |  Google | Facebook | Google's ex-werknemer Evan You | Rich Harris |
| Preferred Language |  Typescript | Javascript | Javascript | Javascript |
| Famous Users | Google, Instagram | Facebook, Netflix | Gitlab, Alibaba | GoDaddy, New York Times |
| Github Stars (14/03/2023) |  86.9k | 204k | 203k | 66.3k |
| Github Contributions (14/03/2023) | 1.679 | 1.606 | 357 | 589 |

**Architectuur**
Qua prestaties presteert Angular meestal beter als het gaat om DOM-manipulatie. Svelte is echter in staat om de code in één stap te produceren en tegelijkertijd te optimaliseren door het ontbreken van virtuele DOM. Een DOM (Document Object Model) is de programmeerbare structuur en inhoud van een webpagina.

Angular, React, Vue en Svelte hebben allemaal actieve communities en hulpmiddelen beschikbaar voor ontwikkelaars.

In termen van het aantal apps dat op deze frameworks draait, is React de duidelijke winnaar, maar Vue komt op de tweede plaats met momenteel meer dan 1,5 miljoen apps die erop draaien.

**Wrap-up**

| | Angular | React | Vue | Svelte |
| ------- | ------- | ------- | ------- | ------- |
| Performance   | Heavier than Svelte and Vue, can be slower to initialize | Heavier than Svelte and Vue, but still manageable | Lightweight, fast initial load. | Lightweight, fast initial load. |
| Documentation | Comprehensive  | Comprehensive  | Comprehensive  | Comprehensive |
| Community & Resources (14/03/2023) | Large and active community. _(293.026 questions on stackoverflow)_ | Large and active community._(447.299 questions on stackoverflow)_ | Large and active community._(102.266 questions on stackoverflow)_ | Growing community (4.544  questions on stackoverflow). |
| Lifespan |  Released in 2010, still actively developed. | Released in 2013, still actively developed. | Released in 2014, still actively developed. | Released in 2016, still actively developed. |
| Hosting |  JS, no problem | JS, no problem | JS, no problem | JS, no problem |
| Entry Treshold | High entry threshold. | Medium entry threshold. | Low entry threshold. | Low entry threshold. |
| Security |  by default. | by default. | by default. | by default. |
| Debugging | Good debugging tools. | Excellent | Good debugging / No extras | Unknown / No extras |
| Testing |  Easy to test with Jasmine and Karma. | Easy to test with Jest or Cypress. | Easy to test with Jest, peecky or vitest | Need to setup env yourself. |


## Onze keuze

Angular biedt een grote en actieve community die regelmatig updates en verbeteringen aanbrengt aan het framework. Dit maakt het gemakkelijker om up-to-date te blijven en eventuele problemen op te lossen die zich tijdens de ontwikkeling voordoen. Angular is volledig te beheren met CLI, dit maakt de instapdrempel om de taal te leren een stuk lager. Ook is Angular bekend om zijn gemakkelijke testmogelijkheden. Aangezien ons project van aanzienlijke grootte is met een grote verscheidenheid aan functionaliteit lijkt Angular ook de beste keuze.

## Terugblik en onze ervaringen
De ervaringen met Angular zijn positief. Angular is een goed voorzien framework voor applicaties met veel functionele vereisten.  

Het opzetten van het project ging gemakkelijk dankzij Angular CLI. Onze zoektocht naar een UI Component Library ging moeizamer. We hadden niet hetzelfde uitgebreide aanbod als bij react.

Onze eerste aanraking met Angular gaf ons meteen de indruk dat er meer boiler plate code aanwezig is. Ondanks de extra code konden we ons wel verwachten aan een hoop extra mogelijkheden. Hier even kort samengevat wat ik fantastisch vond aan Angular:
1. Guard, een fantastische manier om routes te beveiligen
2. Pipes, om gemakkelijk gegevens te transformeren
3. Interceptors, om endpoints anders af te handelen
4. Resolvers, pre-fetch data wanneer de route veranderd

Tijdens het werken met de reactive forms zijn we veel meer extra functies tegengekomen. Deze hebben ons zeker geholpen.

Als je in Angular een nieuw component aanmaakt, maakt het standaard drie bestanden aan (en een vierde als het een module is) één voor de template (HTML), één voor stijlen en de andere om alle logica af te handelen. Je kunt het soms terugbrengen tot één, maar ik denk dat React, door JSX te gebruiken, dit veel efficiënter en schoner aanpakt.
Ook is het project, door minder bestanden te hebben, beter te onderhouden, schoner en minder intimiderend voor nieuwe ontwikkelaars.

Al bij al hebben we een fijne aanraking gehad met Angular en zijn zeker overtuigd van zijn nut bij bepaalde projecten.


## Bronnen
[Angular IO Official Docs](https://angular.io/start#getting-started-with-angular)
[Example Project Angular ProductStore](https://github.com/maximderboven/Angular-ProductStore)
[Quora Can I build my own CMS using Angular 4 ](https://www.quora.com/Can-I-build-my-own-CMS-using-Angular-4-and-Node-JS)
[Medium 3 Style Management Tips That Will Save You a Headache in Your Angular App CSS](https://netbasal.com/3-style-management-tips-that-will-save-you-a-headache-in-your-angular-app-css-94365570987e)
[How To Structure Styling In An Angular App](https://christianlydemann.com/how-to-structure-styling-in-an-angular-app/)
[Tutorialspoint Angular](https://www.tutorialspoint.com/angular8/index.htm)
[Medium How to make angular project layout](https://medium.com/swlh/how-to-make-angular-project-layout-which-requires-many-screens-including-header-footer-and-navbar-3b73cfe69ce7)
[NGServio Creating a Navigation Module and Breadcrumb](https://ngserve.io/angular-tutorial-creating-a-navigation-module-for-breadcrumb/)
[Setting up Child Routes Telerik](https://www.telerik.com/blogs/angular-basics-setting-up-child-routes-angular-12)
[Medium Style Child Components](https://medium.com/the-crazy-coder/how-to-style-child-component-from-parent-in-angular-b829257faba2)
[Stackoverflow Multple ng Contents](https://stackoverflow.com/questions/52638718/multiple-ng-content)
[Angular 10 authentication](https://kkirtigoel01.medium.com/angular-10-login-form-using-reactive-forms-7f24e1d461d1)
[Logout using routeguard dev.to](https://dev.to/ussdlover/logout-with-routeguard-and-urltree-in-angular-111l)
[Handle API call state NICELY Medium](https://medium.com/angular-in-depth/handle-api-call-state-nicely-445ab37cc9f8)
[Make API Calls Medium](https://medium.com/bb-tutorials-and-thoughts/how-to-make-api-calls-in-angular-applications-ab5364cf9533)
[BreadCrumb navigation](https://medium.com/applantic/https-medium-com-applantic-how-to-implement-breadcrumb-navigation-in-angular-and-primeng-52573e49b97a)
[Custom Headers Angular](https://community.grafana.com/t/add-custom-request-headers-using-iframe-using-angular-6/25245)
[Angular Basics: How To Use HttpClient in Angular](https://www.telerik.com/blogs/angular-basics-how-to-use-httpclient)
[Pass function between components](https://medium.com/@7hwyl/how-to-pass-a-function-to-a-child-component-in-angular-719fc3d1ee90)
[Editing Documents with Tinymce and Angular](https://medium.com/thebrand/editing-document-templates-using-tinymce-and-angular-2602394f2e)
[dev.to React vs Vue vs Angular vs Svelte](https://dev.to/hb/react-vs-vue-vs-angular-vs-svelte-1fdm)
[Is Angular Dead in 2022 dev.to](https://dev.to/jdgamble555/is-angular-dead-in-2022-bh9)
[React vs Angular Radixweb](https://radixweb.com/blog/react-vs-angular)
[Interviewbit Angular vs React](https://www.interviewbit.com/blog/angular-vs-react/)
[Using TinyMCE in Angular](https://www.tiny.cloud/docs/tinymce/6/angular-pm/?/?utm_source=google_ads&utm_medium=paid_search&utm_campaign=[ds]_dynamic_search_cn&utm_term=&utm_content=[ds]_consideration_ad5&gclid=Cj0KCQiAjbagBhD3ARIsANRrqEuv8-yJBifC6piRrFl1hl0gO4yNnWzTGGvsSazR1dc_UpWdiaouZHIaAjW6EALw_wcB)
[Google Trends](https://trends.google.nl/trends/explore?cat=32&date=today%205-y&q=%2Fm%2F012l1vxv,%2Fg%2F11c6w0ddw9,Vue,Svelte&hl=nl)
[Npm Trends](https://npmtrends.com/@angular/core-vs-lit-vs-react-vs-solid-js-vs-svelte-vs-vue)
[Learning Angular 5 as a long time react developer](https://medium.com/@nitinj/my-experience-learning-angular-5-as-a-long-time-react-developer-584c87d4987a)
[React: thoughts from an Angular developer DEV.to](https://dev.to/cloudx/react-thoughts-from-an-angular-developer-hbb)
[Angular vs React vs Vue Medium](https://medium.com/js-dojo/angular-vs-react-vs-vue-choosing-the-front-end-framework-b24302818fb1)
[Angular vs React vs Vue: Core Differences](https://www.browserstack.com/guide/angular-vs-react-vs-vue#:~:text=A%20simple%20difference%20between%20these,Vue%20with%2018.97%25%20of%20developers.)
[Angular vs React vs Vue](https://www.codeinwp.com/blog/angular-vs-vue-vs-react/)
[Angular vs Vue](https://www.zartis.com/angular-vs-react-vs-vuejs/)
[3 ways to implement conditional validation of Angular reactive forms Medium](https://medium.com/ngx/3-ways-to-implement-conditional-validation-of-reactive-forms-c59ed6fc3325)