(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Porównanie mistrzów: Angular vs Vue - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2021-12-22
Software Development

Porównanie mistrzów: Angular vs Vue

Oliwia Oremek

Obecnie istnieje kilka powszechnie używanych i stale rozwijanych przez twórców frameworków frontendowych, z których każdy nieco różni się od siebie. A jednak mogą mieć ze sobą coś wspólnego. Oto porównanie oparte na procesie rozwoju - Google Angular vs. open-source Vue.js:

Konfigurowanie projektu

Najszybszy sposób na rozpoczęcie projekt jest użycie CLI dostarczone przez autorów frameworków. Oba oferują całkiem dobrą obsługę; jednak istnieje kilka różnic, tj, Vue oferuje więcej opcji, dzięki czemu można dostosować projekt do swoich potrzeb od samego początku. Możesz wybrać Wersja Vueczy konieczne jest korzystanie z routingu. Maszynopis, preprocesory CSS lub skonfigurować linter. Pozwala również zdecydować, czy chcesz skonfigurować testy (jednostkowe lub E2E).

Vue CLI

Angular jest wyposażony w generator, który umożliwia tworzenie komponentów, usług, interfejsów i dyrektyw bezpośrednio z konsoli, co z mojego doświadczenia jest bardzo przydatne, ponieważ nie ma potrzeby ręcznego konfigurowania folderów, plików i zbędnych elementów. kod ręcznie, zwłaszcza gdy używasz np. wzorca MVC. Typescript jest dostarczany z pudełka z Angular i niejako naciska, by z niego skorzystać. Jeśli jeszcze tego nie zrobiłeś, oto przydatne wprowadzenie, dlaczego powinieneś to wypróbować - możesz to sprawdzić tutaj.

Na początku, CLI Angular pyta tylko o routing lub preferowane preprocesory CSS, które w porównaniu do Vuenie pozostawia wiele miejsca na decydowanie o strukturze i stylu aplikacji. Ale jeśli zamierzasz podążać za konwencją, o którą cię prosi, CLI poprowadzi cię przez całą drogę.

Angular CLI

Struktura projektu

Vue wykorzystuje SFC (Single File Components), co sprawia, że dla nowego programisty rozpoczęcie korzystania z frameworka i odnalezienie się w kodzie jest dość proste.

Dyrektywy

Vue jest również dostarczany po wyjęciu z pudełka z dyrektywami takimi jak `v-if, v-for`, które są bardzo intuicyjne w użyciu, ponieważ jest to prawie kopia Angular te. Vue używa tej samej konwencji dla dwukierunkowych dane (wystarczy przedrostek v- w `v-model`) i dodanie @/v-on wskazującego, że na coś reagujemy. Angular oddziela to, wskazując, w którą stronę idziemy, używając nawiasów dla wiązania zdarzeń i nawiasów kwadratowych dla wiązania właściwości, tj. `(change), [ngStyle], [(ngModel)]`.

W VueSama struktura jest prosta, nie ma potrzeby tworzenia oddzielnych plików dla arkuszy stylów i logiki, więc wszystko jest uporządkowane i przystępne. Oczywiście, Vue zawiera przewodnik po stylach, w którym można znaleźć zalecane zasady, których należy przestrzegać podczas tworzenia projektu; jednak tylko kilka z nich jest obowiązkowych. 

Wydarzenia

W tym przypadku, Vue przychodzi ponownie z bardziej poręcznym rozwiązaniem; mianowicie, aby wyemitować zdarzenie z komponentu podrzędnego do jego rodzica, wystarczy (używając Vue 3 Skład API ) pobiera metodę z obiektu kontekstowego w konfiguracji i po prostu emituje to, czego w danej chwili potrzebujesz:

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

Można to również zrobić bezpośrednio w szablonie jako odpowiedź na inne zdarzenie.

W Angular, należy najpierw zdefiniować EventEmitter w następujący sposób:

@Output() customNameForYourEmitter = new EventEmitter();

Następnie należy wywołać metodę emitującą na EventEmitter:

this.customNameForYourEmitter.emit(this.theDataYouWantToPass);

Wyświetlanie slotów/treści

W obu frameworkach można łatwo przenieść zawartość (zarówno pojedynczą, jak i wielokrotną) z komponentu nadrzędnego do jego elementu podrzędnego, po prostu dodając dodatkowy html wewnątrz tagów podrzędnych, z niewielkimi różnicami:

Vue:

`` 

Angular:

Domyślnie:
    .

Nazwany slot:
    .
<p yourname>
   Jest to nazwane gniazdo
  </p>
  <p>Jest to slot domyślny</p>

Jeśli jednak chcesz warunkowo renderować niektóre części aplikacji, Vue jest bardziej intuicyjna niż Angular i pozwala zrobić to szybciej poprzez dodanie funkcji v-if do dyrektywy <template> który umożliwia renderowanie tylko tych części, które są aktualnie potrzebne.




  

Podczas gdy ng-content jest zawsze renderowana, należy w tym przypadku użyć funkcji ng-template, a następnie utworzyć własną dyrektywę niestandardową:

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

i z powodu imienia, które nadałeś swojemu ng-template Angular będzie wiedział, co powinno zostać wyrenderowane:

Ponadto w ramach komponentu należy wyświetlić szablon, który ma być używany w aplikacji @ContentChild aby uzyskać odpowiedni szablon:

@ContentChild(CustomDirective) content!: CustomDirective;

Usługa a sklep

Angular w swoim rdzeniu zachęca do korzystania z wzorca projektowego MVC, w którym można używać usług dla modelu. Z tego powodu musisz nauczyć się wzorca wstrzykiwania zależności, aby swobodnie operować danymi w swojej aplikacji. Pozwala on oddzielić efekty uboczne wywołań API i korzystać z tej samej logiki w całym projekcie, wstrzykując te części, które są potrzebne w danym momencie, co czyni go również podejściem modułowym.

Angular jest również dostarczany z frameworkiem Ngrx/store opartym na Redux w przypadku, gdy chcesz zastosować bardziej reaktywne podejście z obserwowalnymi elementami RxJs. Zawiera on Akcje, które są używane do wysyłania unikalnych zdarzeń z komponentów i/lub usług, Efekty, które obsługują efekty uboczne lub działania asynchroniczne, które chcesz wykonać oraz Reduktory, które mutują twój stan.

W VuePopularnym podejściem jest użycie biblioteki Vuex do zarządzania stanem, która zawiera również narzędzia takie jak Actions, Mutations i Getters, podobnie jak Ngrx/store, aby pomóc w zarządzaniu i organizowaniu stanu aplikacji. Można je modularyzować, ustawiając różne sklepy dla widoków, np. sklep użytkownika lub sklep koszyka, ale może to prowadzić do problemów z odstępami między nazwami, chyba że użyjesz funkcji namespaced: true w deklaracji sklepu.

Oto porównanie podejścia opartego na usługach i podejścia Vuex, gdy zadaniem jest pobranie niektórych produkt dane dla Twojego sklepu:

@Injectable() // dekorator wskazujący, że chcemy go później użyć w DI
export class ProductsService {
  private products: Product[] = [];

  constructor(private backend: BackendService) { }

  getProducts() {
    this.backend.getAll(Product).then( (products: Product[]) => {
      //zrób cokolwiek chcesz ze swoimi produktami
    });
    return this.products;
  }
}

Następnie w komponencie wstrzykujemy naszą usługę, która ma być używana:
constructor(private service: HeroService) { }

W Vue, po prostu wysyłamy akcję, która wywołuje backend dla my:

store.dispatch(getAllProducts)

i w actions.ts definiujemy działanie:

działania: {
getAllProducts ({ commit }){
    commit('setProducts', await getProducts();); // pobierz dane i umieść wyniki w sklepie
}}

Pobieranie danych

Z VueMożesz użyć Axios/Fetch lub innej biblioteki, której chcesz użyć, jest to naprawdę proste - po prostu obsługujesz asynchroniczne wywołania za pomocą obietnic lub innego podejścia, które najbardziej Ci odpowiada.

try {
http.get('https://url.to.get.data')
    .then(res => res.json())
    .then(data => console.log('do whatever is needed'))
} catch (e) {
    /obsługa błędu
}

Angular jest dostarczany z biblioteką HttpClient, która wykorzystuje obserwowalne elementy, co prowadzi do kolejnej korzyści - aby używać go poprawnie i / lub manipulować danymi, musisz nauczyć się RxJs. Ponownie, uzyskanie płynności i zaznajomienie się z tą abstrakcyjną konstrukcją na samym początku może być dość przytłaczające.

Możesz użyć Axios, jeśli tego właśnie chcesz, ale jak mówi strona Axios GitHub: "Axios jest silnie inspirowany usługą $http dostarczoną w Angular'

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

.pipe(
pluck('results'),
tap(console.log('do whatever side effect you want to use here')
catchError((error) => {
        //obsługa błędu
})
)
.subscribe((result: ResultType[])
    //ostateczna operacja na podanych danych wyjściowych
)
}

Podsumowanie

| Vue | Angular |
| ---- | ---- |
| Nie zmusza do przestrzegania bardzo rygorystycznych zasad | Wymaga użycia Typescript, komponentów/usług opartych na klasach |
| Płaska krzywa uczenia się, łatwa do rozpoczęcia | Wysoka krzywa uczenia się (Typescript, RxJs, Dependency Injection) |
| Wiele rzeczy do skonfigurowania podczas konfiguracji projektu | Niewiele do ustawienia z góry, ale pozwala wygenerować strukturę projektu za pomocą konsoli |
| Społecznościowe ramy oparte zarówno na Angular, jak i React | Stworzone i utrzymywane przez Google.
| Niewiele jest dołączonych, trzeba zainstalować zewnętrzne biblioteki| Zarządzanie stanem, HttpClient dołączony do frameworka |


Zarezerwuj spotkanie z The Codest

Powiązane artykuły

Software Development

Wynajem programistów Vue.js

Chcesz mieć wyróżniającą się aplikację lub stronę internetową? Zatrudnij programistów Vue.js z naszego wykwalifikowanego zespołu i wprowadź swoją wizję w życie. Szybkie kodowanie, fantastyczne UI/UX gwarantowane!

thecodest
Software Development

Kilka sztuczek przyspieszających działanie aplikacji JavaScript

Wraz z rozwojem technologii przeglądarek, aplikacje internetowe zaczęły przenosić coraz więcej logiki do front-endu, odciążając tym samym serwer i zmniejszając liczbę wykonywanych przez niego...

The Codest
Bartosz Słysz Software Engineer
Software Development

Jak znaleźć najlepszych programistów JavaScript?

Według najnowszej ankiety przeprowadzonej przez SlashData wśród programistów, JavaScript pozostaje najpotężniejszym i najpopularniejszym wyborem, wygrywając z innymi językami programowania, takimi jak Python i Java. JS jest powszechnie używany...

The Codest
Monika Krupa Marketing Lead

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polska

    The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

    Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

    Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2026 by The Codest. Wszelkie prawa zastrzeżone.

    pl_PLPolish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian lt_LTLithuanian is_ISIcelandic pl_PLPolish