The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2021-12-22
Desenvolvimento de software

A comparação dos campeões: Angular vs Vue

Oliwia Oremek

Atualmente, existem algumas estruturas de front-end utilizadas habitualmente e constantemente desenvolvidas pelos seus criadores, cada uma ligeiramente diferente da outra. E, no entanto, elas podem ter algo em comum. Aqui está uma comparação baseada no processo de desenvolvimento - Angular do Google vs. Vue.js de código aberto:

Criação de um projeto

A forma mais rápida de dar início a uma projeto é utilizando o CLI fornecido pelos autores dos quadros. Ambos têm um serviço bastante bom; no entanto, existem algumas diferenças, nomeadamente Vue tem mais opções, pelo que pode adaptar um projeto às suas necessidades desde o início. Pode escolher o Versão Vuese é necessário utilizar o encaminhamento. Tipografia, pré-processadores CSS ou configurar um linter logo à partida. Além disso, permite-lhe decidir se pretende configurar testes (unitários ou E2E).

Vue CLI

Angular vem com um gerador que lhe permite criar componentes, serviços, interfaces e diretivas diretamente a partir da consola, o que, pela minha experiência, é muito útil, uma vez que não é necessário configurar manualmente pastas, ficheiros e código à mão, especialmente quando se usa o padrão MVC. O Typescript vem de fábrica com Angular e pressiona-o a utilizá-lo. Se ainda não o fez, aqui está uma introdução útil sobre as razões pelas quais deve experimentá-lo - pode consultá-la aqui.

No início, CLI do Angular pergunta apenas sobre o encaminhamento ou os pré-processadores CSS preferidos, o que, em comparação com o Vuenão lhe deixa muito espaço para decidir sobre a estrutura e o estilo da sua aplicação. Mas se vai seguir a convenção que lhe pede para usar, o CLI vai guiá-lo por todo o caminho.

Angular CLI

Estrutura do projeto

Vue utiliza SFC (Single File Components), o que torna bastante simples para um novo programador começar a utilizar uma estrutura e encontrar os seus pés no código.

Diretivas

Vue também vem de fábrica com diretivas como `v-if, v-for`, que é muito intuitivo de usar, pois é quase uma cópia do Angular uns. Vue utiliza a mesma convenção para ligação de dados bidirecional (apenas prefixando-a com, i.e., v- em `v-model`) e adicionando o @/v-on indicando que estamos a reagir a algo. Angular separa isso indicando o caminho que estamos seguindo usando parênteses para vinculação de eventos e colchetes para vinculação de propriedades, ou seja, `(change), [ngStyle], [(ngModel)]`.

Em VueComo a estrutura em si é simples, não há necessidade de criar ficheiros separados para folhas de estilo e lógica, pelo que tudo fica organizado e acessível. É claro, Vue inclui um guia de estilo onde pode encontrar regras recomendadas a seguir ao criar um projeto; no entanto, existem apenas algumas que são obrigatórias. 

Eventos

Neste caso, Vue surge novamente com uma solução mais prática; nomeadamente, para emitir um evento do componente filho para o seu pai, tudo o que precisa de fazer é (utilizando Vue 3 Composição API ) pega num método do objeto de contexto na configuração e emite simplesmente o que for necessário no momento:

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

Também o pode fazer diretamente no modelo como resposta a outro evento.

Em AngularPara isso, é necessário definir primeiro um EventEmitter da seguinte forma:

@Output() customNameForYourEmitter = new EventEmitter();

Em seguida, é necessário chamar um método de emissão no EventEmitter:

this.customNameForYourEmitter.emit(this.theDataYouWantToPass);

Slots/projeção de conteúdos

Em ambas as estruturas, é possível mover facilmente o conteúdo (único ou múltiplo) do componente principal para o componente secundário, bastando adicionar html dentro das etiquetas secundárias, com ligeiras diferenças:

Vue:

`` 

Angular:

Predefinição:
    

Ranhura nomeada:
    
<p yourname>
   Esta é uma ranhura com nome
  </p>
  <p>Esta é uma ranhura predefinida</p>

No entanto, se pretender renderizar condicionalmente algumas partes da sua aplicação, Vue é mais intuitivo do que Angular e permite-lhe fazê-lo mais rapidamente, adicionando a função v-if à sua diretiva que lhe permite processar apenas as partes que são atualmente necessárias.


  


  

Enquanto o ng-conteúdo é sempre processado, é necessário utilizar, neste caso, o ng-templatee, posteriormente, criar a sua própria diretiva personalizada:

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

e por causa do nome que dás ao teu ng-template o Angular saberá o que deve ser processado:


  

Além disso, dentro do componente, pretende projetar o seu modelo para ser utilizado no @ContentChild para obter o modelo correto:

@ContentChild(CustomDirective) content!: CustomDirective;

Serviço vs loja

Angular no seu núcleo encoraja-o a utilizar o padrão de conceção MVC onde pode utilizar serviços para o modelo. Por isso, você precisa aprender o padrão de injeção de dependência para operar livremente os dados em sua aplicação. Ele permite que você separe os efeitos colaterais de suas chamadas de API e use a mesma lógica em todo o projeto, injetando as partes que você precisa no momento, o que também o torna uma abordagem modular.

Angular também vem com o framework Ngrx/store baseado no Redux no caso de querer utilizar uma abordagem mais reactiva com observáveis RxJs. Ele vem com Actions que são usadas para despachar eventos exclusivos de componentes e/ou serviços, Effects que lidam com efeitos colaterais ou ações assíncronas que você deseja executar e Reducers que alteram seu estado.

Em VueA abordagem popular é usar a biblioteca Vuex para gerenciamento de estado, que também vem com ferramentas como Actions, Mutations e Getters, assim como Ngrx/store, para ajudá-lo a gerenciar e organizar o estado de sua aplicação. É possível modularizá-la definindo diferentes lojas para suas visualizações, ou seja, uma loja de usuário ou uma loja de carrinho, mas isso pode levar a problemas de espaçamento de nomes, a menos que você use o namespaced: true na sua declaração de loja.

Segue-se uma comparação entre a abordagem baseada em serviços e a abordagem Vuex quando a tarefa é ir buscar alguns produto dados para a sua loja:

@Injectable() // decorador para indicar que queremos utilizá-lo em DI mais tarde
export class ProdutosServiço {
  private products: Product[] = [];

  constructor(private backend: BackendService) { }

  getProducts() {
    this.backend.getAll(Product).then( (products: Product[]) => {
      //faz o que quiseres com os teus produtos
    });
    return this.products;
  }
}

Depois, no componente, injectamos o nosso serviço a utilizar:
constructor(private service: HeroService) { }

Em Vue, simplesmente enviamos uma ação que faz uma chamada de backend para nós:

store.dispatch(getAllProducts)

e no acções.ts definimos uma ação:

acções: {
getAllProducts ({ commit }){
    commit('setProducts', await getProducts();); // vai buscar dados e coloca os resultados no armazenamento
}}

Obtenção de dados

Com VueSe quiser utilizar Axios/Fetch ou qualquer outra biblioteca, é muito simples - basta tratar as chamadas assíncronas com promessas ou qualquer outra abordagem que lhe seja mais adequada.

tentar {
http.get('https://url.to.get.data')
    .then(res => res.json())
    .then(data => console.log('faça o que for necessário'))
} catch (e) {
    //tratar erro
}

Angular vem com a biblioteca HttpClient que usa observáveis, levando-o a outra vantagem - para usá-la corretamente e/ou manipular dados, você precisa aprender RxJs. Mais uma vez, pode ser bastante complicado tornar-se fluente e sentir-se familiarizado com esta construção abstrata logo no início.

Pode utilizar o Axios se for isso que pretende fazer, mas como diz a página do GitHub do Axios: "O Axios é fortemente inspirado pelo serviço $http fornecido em Angular'

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

.pipe(
pluck('results'),
tap(console.log('faça qualquer efeito secundário que queira usar aqui')
catchError((error) => {
        //tratar o erro
})
)
.subscribe((result: ResultType[])
    //operação final num determinado resultado
)
}

Resumindo

| Vue | Angular |
| ———– | ———– |
| Não obriga a seguir regras muito rígidas Exige a utilização de Typescript, componentes/serviços baseados em classes
| Curva de aprendizagem plana, fácil de começar | Curva de aprendizagem elevada (Typescript, RxJs, Injeção de Dependência)
| Muitas coisas para configurar durante a configuração do projeto| Não há muito o que configurar, mas ele permite gerar a estrutura do projeto através do console |
| Quadro comunitário baseado tanto no Angular como no React | Criado e mantido pelo Google
| Não há muita coisa incluída, é necessário instalar bibliotecas externas| Gerenciamento de estado, HttpClient incluído na estrutura |

Ler mais:

JavaScript está completamente morto. Um gajo qualquer na Internet

Implantar a API GraphQL/MongoDB usando as funções Netlify

Como matar um projeto com más práticas de codificação

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

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