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.json
do “Quickstart” no lugar dopackage.json
atual e executarnpm install
. - Possivelmente, você deve deletar a pasta “typings” e rodar
npm run postinstall
, se erros não aparecerem nos*.ts
do projeto. Porque erros vão aparecer! - Seguir o exemplo para configurar as rotas.
- Muitos
*.component.ts
terão erro, poisROUTER_DIRECTIVES
não existe mais e deve ser retirado de todo o código. Router
,ActivatedRoute
eParams
continuam sendo importados normalmente de@angular/router
.- Diretivas como o
routerLink
sã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
. Routes
substituiRouterConfig
.- No lugar de
terminal: true
(junto comredirectTo: ...
), agora é usadopathMatch: 'full'
. - É necessário exportar o objeto
whateverRouting
. - E o Router de Login exporta
authProviders
contendo 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.ts
pode 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.ts
importaalunos.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.ts
deve 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
.let
deve 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 |