Na empresa em que estou trabalhando, nós estamos construindo uma aplicação usando o Angular 2 no front-end. Nós iniciamos o projeto na versão RC3 do Angular 2 (2.0.0-rc3), e agora mais recentemente nós atualizamos para a versão Final do Angular 2 (2.0.0). Fazer isso (pelo menos para mim) foi uma tarefa mais difícil do que eu esperava. Então eu resolvi escrever um passo a passo, enquanto eu aprendia a atualizar o projeto.
Como eu disse, fazer a atualização pode dar um pouco de trabalho. Algumas coisas no Router mudaram e isso foi o que mais me trouxe dificuldade. Além de que agora Módulos são usados para cada “pacote de funcionalidade”. Você pode conferir esse Plnkr e o “Quickstart” para ter uma ideia do que deve ser feito. No passo-a-passo abaixo, eu vou me referir a esses dois o tempo inteiro, então eu espero que você pelo menos dê uma olhada neles antes.
Processo de atualização do angular
- Colocar os arquivos na nova convenção de nomes:
*.component.{ts,html},*.service.ts,*.routing.ts,*.guard.ts, etc. (Opcional) - Colocar o
package.jsondo “Quickstart” no lugar dopackage.jsonatual e executarnpm install. - Possivelmente, você deve deletar a pasta “typings” e rodar
npm run postinstall, se erros não aparecerem nos*.tsdo projeto. Porque erros vão aparecer! - Seguir o exemplo para configurar as rotas.
- Muitos
*.component.tsterão erro, poisROUTER_DIRECTIVESnão existe mais e deve ser retirado de todo o código. Router,ActivatedRouteeParamscontinuam sendo importados normalmente de@angular/router.- Diretivas como o
routerLinksão inseridas pelo RouterModule aparentemente, mas não tenho certeza.
- Muitos
- Acertar também os arquivos de rotas (
*.routing.ts):- Não existe mais o
RouterConfig, nem oprovideRouter. RoutessubstituiRouterConfig.- No lugar de
terminal: true(junto comredirectTo: ...), agora é usadopathMatch: 'full'. - É necessário exportar o objeto
whateverRouting. - E o Router de Login exporta
authProviderscontendo os “Guards” e o serviço de login. (acho que isso é opcional.)
- Não existe mais o
- É recomendado criar módulos for funcionalidade (ex:
app/alunos,app/profs, etc). O módulo raíz (app.module.ts) importa os outros módulos, na seçãoimports. Fazer isso não é necessário. É possível ter um único módulo, mas ter múltiplos módulos está sendo muito usado. Ao optar por não usar esse modelo, oapp.module.tspode rapidamente ficar lotado de Components e Services. Independente da escolha, pelo menos um módulo deve ser criado para a aplicação, chamadoapp.module.ts.- Cada Módulo importa os módulos que irá precisar, como:
HttpModule,FormsModule,CommomMondule. - Cada Módulo importa (
imports) as rotas pertencentes àquele módulo. Ex:alunos.module.tsimportaalunos.routing.ts. - Cada Módulo registra seus componentes na seção
declarations. - Cada Módulo registra os serviços que fornece na seção
providers. app.module.tsdeve importarBrowserModule, e deve ter uma seçãobootstrap: [ AppComponent ].
- Cada Módulo importa os módulos que irá precisar, como:
- Criar um
main.ts. Tudo é igual ao exemplo. - Atualizar o
systemjs.config.js. (Também igual ao exemplo.) - Nos templates HTML, não é mais possível usar
#id=index, ou qualquer#dentro do*ngFor.letdeve ser usado.
Exemplo de Módulo
1 | // whatever.module.ts |
Exemplo de rotas
1 | // whatever.routing.ts |
O router de login é um pouco diferente:
1 | // ... |
Exemplo de uso de Router dentro de um Component
Os imports que eu observei do router:
1 | // whatever.component.ts |