Angular 2/4 - O Bootstrap da aplicação
Neste artigo vou apresentar os conceitos envolvidos no fluxo das operações que ocorrem no bootstrap de uma aplicação Angular. |
Você sabe me explicar como uma aplicação Angular 2/4 é iniciada ?
Qual é o fluxo das operações necessárias para iniciar uma aplicação Angular 2/4 ?
Se ainda não sabe esse artigo vai te mostrar.
O Bootstrap da aplicação Angular
Quando você cria uma aplicação usando o Angular CLI, usando o comando ng generate nome_app, o Angular vai criar as pastas, os arquivos, vai baixar as dependências e fazer as configurações básicas para deixar a sua aplicação Angular pronta para ser usada.
Para executar a sua aplicação Angular basta então digitar : ng server ou npm start
Esses comandos vão disparar um servidor do webpack usado para o ambiente de desenvolvimento conhecido como Live Development Server.
Nota: O webpack é um empacotador de código para projetos web focado em módulos da aplicação. Ele é um pacote do Nodejs.
O serviço do webpack é mapear e analisar todos os arquivos da nossa aplicação, separando os arquivos em bundles ou pacotes (main.bundle.js, styles.bundle.js, vendor.bundle.js, inline.bundle.js ,etc)
A seguir quando o arquivo index.html da nossa aplicação for solicitado o webpack vai injetar todos os bundles no final do arquivo index.html.
Se você abrir o arquivo index.html de uma aplicação inicial gerada pelo Angular CLI vai notar que não existe nenhuma referência para arquivos CSS nem para arquivos de Scripts:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Teste</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<teste-root>Loading...</teste-root>
</body>
</html>
|
Mas se você visualizar o código fonte da página inicial da aplicação que é exibida, verá o código contendo uma série de referência a scripts no final da página:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Teste</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<teste-root>Loading...</teste-root>
<script type="text/javascript" src="inline.bundle.js"></script><script type="text/javascript" src="polyfills.bundle.js"></script><script type="text/javascript" src="styles.bundle.js">
</script><script type="text/javascript" src="vendor.bundle.js"></script><script type="text/javascript" src="main.bundle.js"></script></body>
</html>
|
Assim, quando o webpack injeta esses scripts na página index.html , o navegador vai receber o html com esses scripts e vai iniciar a execução dos scripts.
Assim o script main.bundle.js vai inicializar o bootstrap da nossa aplicação.
Vejamos então esse fluxo...
Fluxo da inicialização de uma aplicação Angular 2
O primeiro arquivo a ser carregado será o arquivo main.ts:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { environment } from './environments/environment';
import { AppModule } from './app/app.module';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule);
|
Esse arquivo é o responsável pelo bootstrap da nossa aplicação. Neste arquivo a linha de código que dá inicia a nossa aplicação é :
platformBrowserDynamic().bootstrapModule(AppModule);
Nesta linha de código estamos passando uma referência do módulo principal da aplicação que é o modúlo que foi gerado pelo Angular CLI chamado AppModule que esta no arquivo app.module.ts.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
|
Este arquivo app.module.ts é um módulo do Angular que é responsável por agrupar uma série de componentes de uma aplicação Angular.
Neste arquivo temos a classe AppModule e um decorator @NgModule que aplica uma série de metadados a esta classe. Além disso temos imports para os principais módulos do Angular geralmente usados.
Dentre os metadados, temos o metadado bootstrap : [AppComponent] que indica qual componente vai fazer o bootstrap da aplicação. No caso o componente AppComponent, que foi gerado pelo Angular CLI, e, que esta no arquivo app.component.ts:
Nota : Lembre-se que você tem que informar o Angular a qual módulo o componente pertence. Sendo que um componente declarado no módulo raiz será acessado por toda a aplicação.
import { Component } from '@angular/core';
@Component({
selector: 'teste-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'teste works!';
}
|
No arquivo app.component.ts temos a classe AppComponent, onde o decorator @Component esta aplicando os seguintes metadados. (específicos para componentes)
Nota: Podemos também usar o metadado Template ao invés de TemplateUrl. Neste caso o definimos o código do template direto no arquivo.
O atributo ‘selector’ significa o nome da tag HTML que usaremos em nosso arquivo HTML para chamar o componente que será a nossa view e que será interpretado pelo Angular 2. Definimos o nome da nossa tag como 'teste-root'.
O atributo ‘templateUrl’ contém o caminho e o nome do arquivo que será a nossa view e que será inserido na página dentro da tag definida em ‘selector’.
O atributo ‘styleUrls’ contém o caminho e o nome do arquivo que será usado como arquivo de estilos em nossa aplicação. (Não vamos usar esse recurso)
Assim, no arquivo index.html temos na tag <body> o elemento <teste-root>Loading...</teste-root>, onde <teste-root> é o valor do selector do nosso componente acima.
Ao carregar a página no navegador você verá a mensagem Loading... ser exibida rapidamente e a seguir ser substituida pelo texto : "teste work!"
O selector <teste-root> vai carregar o componente contido no arquivo app.component.html
<h1>
{{title}}
</h1>
|
Sendo que a interpolação {{title}} substitui de forma dinâmica o valor de title pelo texto 'teste works!" definido na classe AppComponent.
Podemos então esquematizar o fluxo dos arquivos assim :
webpack -> index.html -> main.ts -> app.module.ts -> app.component.ts -> app.component.html -> index.html(página)
É assim que se dá o bootstrap de uma aplicação angular básica com o webpack.
Sabendo, amados irmãos, que a vossa
eleição é de Deus;Porque o nosso evangelho não foi a vós somente em palavras,
mas também em poder, e no Espírito Santo, e em muita certeza, como bem sabeis
quais fomos entre vós, por amor de vós.
1 Tessalonicenses 1:4,5
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
NET - Criando um livro de contatos usando o AngularJS - Macoratti
NET - AngularJS : Apresentação (início do curso) - Macoratti
ASP .NET MVC - Crud com Entity Framework e AngularJS - Macoratti
AngularJS - Conceitos Básicos - YouTube (série de 13 vídeo aulas sobre o Angular)
NET - O que é TypeScript e quais os seus benefícios - Macoratti
TypeScript - Configurando o VS Community 2015 para ... - Macoratti
Visual Studio - Bem-Vindo Node.js : desenvolvendo para Node.js na plataforma .NET