window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes allerede') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Sammenligningen af mestrene: Angular vs Vue - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2021-12-22
Udvikling af software

Sammenligningen af mestrene: Angular vs Vue

Oliwia Oremek

I øjeblikket er der et par frontend-frameworks, der bruges almindeligt og konstant udvikles af deres skabere, hver især lidt anderledes end den anden. Og alligevel har de måske noget til fælles. Her er en sammenligning baseret på udviklingsprocessen - Googles Angular vs. open source Vue.js:

Opsætning af et projekt

Den hurtigste måde at starte en projekt er ved at bruge CLI leveret af rammeværkets forfattere. Begge leveres med ret god service; der er dog få forskelle, f.eks, Vue kommer med flere muligheder, og derfor kan du skræddersy et projekt til dine behov helt fra starten. Du kan vælge Vue-versionUanset om du skal bruge routing. Typescript, CSS-præprocessorer eller opsætte en linter med det samme. Du kan også beslutte, om du vil opsætte tests (unit eller E2E).

Vue CLI

Angular leveres med en generator, som giver dig mulighed for at oprette komponenter, tjenester, grænseflader og direktiver direkte fra konsollen, hvilket efter min erfaring er meget praktisk, da der ikke er behov for manuelt at opsætte mapper, filer og overflødige Kode i hånden, især når man bruger f.eks. et MVC-mønster. Typescript kommer ud af boksen med Angular og presser dig til at bruge det. Hvis du ikke har gjort det endnu, er her en praktisk introduktion til, hvorfor du bør prøve det - du kan tjekke det ud her.

Til at begynde med, Angular's CLI spørger dig kun om routing eller foretrukne CSS-præprocessorer, som i sammenligning med Vuegiver dig ikke meget plads til at bestemme strukturen og stilen i dit program. Men hvis du vil følge den konvention, den beder dig om at bruge, vil CLI lede dig hele vejen.

Angular CLI

Projektets struktur

Vue bruger SFC (Single File Components), hvilket gør det ganske enkelt for en ny udvikler at komme i gang med at bruge et framework og finde sig til rette i koden.

Direktiver

Vue kommer også ud af boksen med direktiver som `v-if, v-for`, som er meget intuitive at bruge, da det næsten er en kopi af Angular dem. Vue bruger den samme konvention til tovejs databinding (blot ved at sætte v- i `v-model` foran) og tilføje @/v-on for at angive, at vi reagerer på noget. Angular adskiller dette ved at angive, hvilken vej vi går, ved at bruge parenteser til hændelsesbinding og firkantede parenteser til egenskabsbinding, dvs. `(change), [ngStyle], [(ngModel)]`.

I VueDa selve strukturen er enkel, er det ikke nødvendigt at lave separate filer til stylesheets og logik, så det hele er organiseret og overskueligt. Det er klart, Vue kommer med en stilguide, hvor du kan finde anbefalede regler at følge, når du opretter et projekt; der er dog kun nogle få, der er obligatoriske. 

Begivenheder

I dette tilfælde, Vue kommer igen med en mere praktisk løsning; nemlig at sende en hændelse fra den underordnede komponent til dens overordnede, alt hvad du skal gøre er (ved hjælp af Vue 3 Sammensætning API ) tager en metode fra kontekstobjektet i opsætningen og udsender simpelthen det, du har brug for i øjeblikket:

setup(props, { emit }) { const componentMethodYouWantToUseSomewhere = () => { emit('customNameOfYourEvent', dataYouWantToPass); } }

Du kan også gøre det direkte i skabelonen som en reaktion på en anden begivenhed.

I Angularskal du først definere en EventEmitter på følgende måde:

@Output() customNameForYourEmitter = new EventEmitter();

Derefter skal du kalde en emit-metode på EventEmitteren:

this.customNameForYourEmitter.emit(this.theDataYouWantToPass);

Slots/indholdsprojektion

I begge frameworks kan du nemt flytte indhold (enkelt eller flere) fra den overordnede komponent til den underordnede ved blot at tilføje ekstra html i de underordnede tags, dog med små forskelle:

Vue:

``. 

Angular:

Standard:
    .

Navngivet slot:
    .
<p yourname>
   Dette er et navngivet slot
  </p>
  <p>Dette er en standardplads</p>

Men hvis du ønsker at gøre nogle dele af din applikation betinget, Vue er mere intuitiv end Angular og lader dig gøre det hurtigere ved at tilføje v-if direktiv til din . tag, som giver dig mulighed for kun at gengive de dele, der er brug for i øjeblikket.

.
  .
.

   </template

Mens ng-indhold altid gengives, skal du i dette tilfælde bruge ng-skabelonog senere oprette dit eget brugerdefinerede direktiv:

<div *ngif="conditionToBeMet" [id]="contentId">
    <ng-container [ngtemplateoutlet]="content.templateRef"></ng-container>
</div>
@Direktiv({
  selector: '[customDirectiveName]'
})
export class CustomDirective {
  constructor(public templateRef: TemplateRef) {}
}

og på grund af det navn, du giver din ng-skabelon attribut, vil Angular vide, hvad der skal gengives:

.
  .
.

I komponenten vil du også projicere din skabelon, så den kan bruges i @ContentChild for at få den rigtige skabelon:

@ContentChild(CustomDirective) content!: CustomDirective;

Service vs. butik

Angular opfordrer i sin kerne til at bruge MVC-designmønsteret, hvor man kan bruge tjenester til modellen. Derfor er du nødt til at lære dependency injection-mønsteret for at kunne bruge data frit i din applikation. Det giver dig mulighed for at adskille sideeffekter af dine API-kald og bruge den samme logik på tværs af hele projektet ved at injicere de dele, du har brug for i øjeblikket, hvilket også gør det til en modulær tilgang.

Angular leveres også med Ngrx/store-rammen baseret på Redux-mønsteret, hvis du vil bruge en mere reaktiv tilgang med RxJs-observationer. Det kommer med Actions, som bruges til at sende unikke hændelser fra komponenter og/eller tjenester, Effects, som håndterer sideeffekter eller asynkrone handlinger, du vil udføre, og Reducers, som muterer din tilstand.

I VueDen populære tilgang er at bruge Vuex-biblioteket til tilstandsstyring, som også kommer med værktøjer som Actions, Mutations og Getters, ligesom Ngrx/store, til at hjælpe dig med at styre og organisere tilstanden i din applikation. Du kan modularisere det ved at indstille forskellige stores til dine visninger, f.eks. en user store eller en cart store, men det kan føre til problemer med name-spacing, medmindre du bruger namespaced: true egenskab i din butiksdeklaration.

Her er en sammenligning af den servicebaserede tilgang og Vuex-tilgangen, når opgaven er at hente nogle produkt data til din butik:

@Injectable() // dekorator for at angive, at vi vil bruge den i DI senere.
export class ProductsService {
  private products: Product[] = [];

  constructor(private backend: BackendService) { }

  getProducts() {
    this.backend.getAll(Product).then( (products: Product[]) => {
      // gør, hvad du vil med dine produkter
    });
    return this.products;
  }
}

Derefter injicerer vi den tjeneste, der skal bruges, i komponenten:
constructor(private service: HeroService) { }

I Vuesender vi blot en handling, der foretager et backend-kald for os:

store.dispatch(getAllProducts)

og i actions.ts fil definerer vi en handling:

handlinger: {
getAllProducts ({ commit }){
    commit('setProducts', await getProducts();); // hent data og læg resultaterne i butikken
}}

Hentning af data

Med VueDu kan bruge Axios/Fetch, eller hvilket bibliotek du vil, det er meget ligetil - du håndterer bare asynkrone kald med promises eller den tilgang, der passer dig bedst.

prøv {
http.get('https://url.to.get.data')
    .then(res => res.json())
    .then(data => console.log('gør hvad der er nødvendigt'))
} catch (e) {
    //håndter fejl
}

Angular kommer med HttpClient-biblioteket, der bruger observables, hvilket fører til en anden fordel - for at bruge det korrekt og/eller manipulere data skal du lære RxJs. Igen kan det være ret overvældende at blive flydende og føle sig fortrolig med denne abstrakte konstruktion i begyndelsen.

Du kan bruge Axios, hvis det er det, du vil, men som der står på Axios' GitHub-side: 'Axios er stærkt inspireret af $http-tjenesten, der findes i Angular'

private getAllItems(): void {
this.http
.get('https://url.to.fetch.data')

.pipe(
pluck('results'),
tap(console.log('gør den sideeffekt, du vil bruge her')
catchError((error) => {
        //håndter fejl
})
)
.subscribe((result: ResultType[])
    //endelig operation på givet output
)
}

Opsummering

| Vue Angular
| ———– | ———– |
| Presser dig ikke til at følge meget strenge regler | Kræver brug af Typescript, klassebaserede komponenter/services |.
| Flad indlæringskurve, let at komme i gang med | Høj indlæringskurve (Typescript, RxJs, Dependency Injection) | Høj indlæringskurve (Typescript, RxJs, Dependency Injection)
| Der er mange ting, der skal konfigureres under projektopsætningen. Der er ikke meget at sætte op på forhånd, men det giver dig mulighed for at generere projektstruktur via konsollen.
| Community-drevet rammeværk baseret på både Angular og React | Oprettet og vedligeholdt af Google
| Der er ikke meget inkluderet, man skal installere eksterne biblioteker. State management, HttpClient inkluderet i frameworket.

Læs mere om det:

JavaScript er fuldstændig død. En fyr på internettet

Implementer GraphQL/MongoDB API ved hjælp af Netlify-funktioner

Sådan dræber du et projekt med dårlig kodningspraksis

Relaterede artikler

Udvikling af software

Byg fremtidssikrede webapps: Indsigt fra The Codest's ekspertteam

Oplev, hvordan The Codest udmærker sig ved at skabe skalerbare, interaktive webapplikationer med banebrydende teknologier, der leverer sømløse brugeroplevelser på tværs af alle platforme. Lær, hvordan vores ekspertise driver digital transformation og...

DENKODEST
Udvikling af software

Top 10 Letlands-baserede softwareudviklingsvirksomheder

Læs om Letlands bedste softwareudviklingsvirksomheder og deres innovative løsninger i vores seneste artikel. Find ud af, hvordan disse teknologiledere kan hjælpe med at løfte din virksomhed.

thecodest
Løsninger til virksomheder og scaleups

Grundlæggende om Java-softwareudvikling: En guide til succesfuld outsourcing

Udforsk denne vigtige guide til vellykket outsourcing af Java-softwareudvikling for at forbedre effektiviteten, få adgang til ekspertise og skabe projektsucces med The Codest.

thecodest
Udvikling af software

Den ultimative guide til outsourcing i Polen

Den voldsomme stigning i outsourcing i Polen er drevet af økonomiske, uddannelsesmæssige og teknologiske fremskridt, der fremmer it-vækst og et erhvervsvenligt klima.

TheCodest
Løsninger til virksomheder og scaleups

Den komplette guide til IT-revisionsværktøjer og -teknikker

IT-revisioner sikrer sikre, effektive og kompatible systemer. Lær mere om deres betydning ved at læse hele artiklen.

Codest
Jakub Jakubowicz CTO og medstifter

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologiske knudepunkter

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Hjerneambassaden, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

    da_DKDanish
    en_USEnglish de_DEGerman sv_SESwedish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek da_DKDanish