# Angular Migration
> Migra de AngularJS a Angular usando modo híbrido, reescritura incremental de componentes y actualización de la inyección de dependencias.
Fuente: https://skillsagentes.com/skills/wshobson/agents/angular-migration
Markdown: https://skillsagentes.com/skills/wshobson/agents/angular-migration.md
Repositorio: https://github.com/wshobson/agents
Autor: wshobson
Licencia: MIT
Actualizado: hace 4 meses
Coste de contexto: 57 tok instalada, 1.8k tok al activarse, 2.2k tok con todos los archivos del bundle
Bundle: 2 archivos, 9 KB
Permisos que pide: ninguno declarado
## Instalación
Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina.
```bash
# Claude Code
npx -y skills add wshobson/agents --skill angular-migration --agent claude-code
# Cursor
npx -y skills add wshobson/agents --skill angular-migration --agent cursor
# Codex
npx -y skills add wshobson/agents --skill angular-migration --agent codex
# Gemini CLI
npx -y skills add wshobson/agents --skill angular-migration --agent gemini
# Windsurf
npx -y skills add wshobson/agents --skill angular-migration --agent windsurf
# Cline
npx -y skills add wshobson/agents --skill angular-migration --agent cline
```
## Qué hace
- Aporta estrategias y patrones de código para migrar aplicaciones AngularJS a Angular
- Ofrece ejemplos de modo híbrido con ngUpgrade y bootstrap combinado
- Muestra cómo convertir controladores, directivas y servicios de AngularJS a componentes y servicios Angular
- Explica actualización/downgrade de inyección de dependencias entre AngularJS y Angular
- Documenta la migración de rutas de $routeProvider a Angular Router
## Cuándo usarla
- Migrar aplicaciones AngularJS (1.x) a Angular (2+)
- Ejecutar aplicaciones híbridas AngularJS/Angular
- Convertir directivas en componentes
- Modernizar la inyección de dependencias o migrar el sistema de rutas
## Qué la activa
- "Ayúdame a migrar mi app AngularJS a Angular en modo híbrido"
- "Convierte este directive de AngularJS en un componente Angular"
- "Cómo hago downgrade de un servicio Angular para usarlo en AngularJS"
- "Necesito migrar mis rutas de $routeProvider a Angular Router"
## Antes de instalar
- Para patrones y ejemplos completos adicionales, consulta references/details.md.
## Archivos
- SKILL.md — 7 KB
- references/details.md — 2 KB
## SKILL.md
Reproducido tal cual desde wshobson/agents bajo MIT. Esta sección es el documento original y está en inglés.
# Angular Migration
Master AngularJS to Angular migration, including hybrid apps, component conversion, dependency injection changes, and routing migration.
## When to Use This Skill
- Migrating AngularJS (1.x) applications to Angular (2+)
- Running hybrid AngularJS/Angular applications
- Converting directives to components
- Modernizing dependency injection
- Migrating routing systems
- Updating to latest Angular versions
- Implementing Angular best practices
## Migration Strategies
### 1. Big Bang (Complete Rewrite)
- Rewrite entire app in Angular
- Parallel development
- Switch over at once
- **Best for:** Small apps, green field projects
### 2. Incremental (Hybrid Approach)
- Run AngularJS and Angular side-by-side
- Migrate feature by feature
- ngUpgrade for interop
- **Best for:** Large apps, continuous delivery
### 3. Vertical Slice
- Migrate one feature completely
- New features in Angular, maintain old in AngularJS
- Gradually replace
- **Best for:** Medium apps, distinct features
## Hybrid App Setup
```typescript
// main.ts - Bootstrap hybrid app
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { UpgradeModule } from "@angular/upgrade/static";
import { AppModule } from "./app/app.module";
platformBrowserDynamic()
.bootstrapModule(AppModule)
.then((platformRef) => {
const upgrade = platformRef.injector.get(UpgradeModule);
// Bootstrap AngularJS
upgrade.bootstrap(document.body, ["myAngularJSApp"], { strictDi: true });
});
```
```typescript
// app.module.ts
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { UpgradeModule } from "@angular/upgrade/static";
@NgModule({
imports: [BrowserModule, UpgradeModule],
})
export class AppModule {
constructor(private upgrade: UpgradeModule) {}
ngDoBootstrap() {
// Bootstrapped manually in main.ts
}
}
```
## Component Migration
### AngularJS Controller → Angular Component
```javascript
// Before: AngularJS controller
angular
.module("myApp")
.controller("UserController", function ($scope, UserService) {
$scope.user = {};
$scope.loadUser = function (id) {
UserService.getUser(id).then(function (user) {
$scope.user = user;
});
};
$scope.saveUser = function () {
UserService.saveUser($scope.user);
};
});
```
```typescript
// After: Angular component
import { Component, OnInit } from "@angular/core";
import { UserService } from "./user.service";
@Component({
selector: "app-user",
template: `
`,
})
export class UserCardComponent {
@Input() user: any;
@Output() delete = new EventEmitter();
}
// Usage:
```
## Service Migration
```javascript
// Before: AngularJS service
angular.module("myApp").factory("UserService", function ($http) {
return {
getUser: function (id) {
return $http.get("/api/users/" + id);
},
saveUser: function (user) {
return $http.post("/api/users", user);
},
};
});
```
```typescript
// After: Angular service
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";
@Injectable({
providedIn: "root",
})
export class UserService {
constructor(private http: HttpClient) {}
getUser(id: number): Observable {
return this.http.get(`/api/users/${id}`);
}
saveUser(user: any): Observable {
return this.http.post("/api/users", user);
}
}
```
## Dependency Injection Changes
### Downgrading Angular → AngularJS
```typescript
// Angular service
import { Injectable } from "@angular/core";
@Injectable({ providedIn: "root" })
export class NewService {
getData() {
return "data from Angular";
}
}
// Make available to AngularJS
import { downgradeInjectable } from "@angular/upgrade/static";
angular.module("myApp").factory("newService", downgradeInjectable(NewService));
// Use in AngularJS
angular.module("myApp").controller("OldController", function (newService) {
console.log(newService.getData());
});
```
### Upgrading AngularJS → Angular
```typescript
// AngularJS service
angular.module('myApp').factory('oldService', function() {
return {
getData: function() {
return 'data from AngularJS';
}
};
});
// Make available to Angular
import { InjectionToken } from '@angular/core';
export const OLD_SERVICE = new InjectionToken('oldService');
@NgModule({
providers: [
{
provide: OLD_SERVICE,
useFactory: (i: any) => i.get('oldService'),
deps: ['$injector']
}
]
})
// Use in Angular
@Component({...})
export class NewComponent {
constructor(@Inject(OLD_SERVICE) private oldService: any) {
console.log(this.oldService.getData());
}
}
```
## Routing Migration
```javascript
// Before: AngularJS routing
angular.module("myApp").config(function ($routeProvider) {
$routeProvider
.when("/users", {
template: "",
})
.when("/users/:id", {
template: "",
});
});
```
```typescript
// After: Angular routing
import { NgModule } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
const routes: Routes = [
{ path: "users", component: UserListComponent },
{ path: "users/:id", component: UserDetailComponent },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
```
## Additional patterns and templates
More detailed templates and worked examples live in `references/details.md`. Read that file for the full pattern library.
## Dónde encaja
- Categoría: [Herramientas para desarrolladores](https://skillsagentes.com/categorias/herramientas-desarrollo.md) — Skills que cambian cómo tu agente escribe, revisa y despliega código.
- Creador: [wshobson](https://skillsagentes.com/creators/wshobson.md) — 183 skills en el directorio
- [Todas las skills](https://skillsagentes.com/skills.md)
- [Ranking de instalaciones](https://skillsagentes.com/ranking.md)
## Otras skills del mismo repositorio
- [Hermes Tweet](https://skillsagentes.com/skills/wshobson/agents/hermes-tweet.md): Instala y opera Hermes Tweet, un plugin de Hermes Agent para investigar X/Twitter, leer timelines, analizar tweets y ejecutar operaciones privadas o de cambio de estado con aprobación previa.
- [Grounded Vault](https://skillsagentes.com/skills/wshobson/agents/grounded-vault.md): Úsalo para mantener un almacén Markdown de conocimiento donde cada afirmación compilada se rastrea hasta una fuente inmutable y el drift se detecta con git diff sin gastar tokens.
- [Postgresql Table Design](https://skillsagentes.com/skills/wshobson/agents/postgresql-table-design.md): Úsalo al diseñar o revisar un esquema específico de PostgreSQL: buenas prácticas, tipos de datos, indexación, restricciones, patrones de rendimiento y funciones avanzadas.
- [Superself](https://skillsagentes.com/skills/wshobson/agents/superself.md): Úsalo cuando un proyecto guarda su estado en Superself: lee `self context` al iniciar sesión, vincula el trabajo a una work unit, reporta con evidencia y registra decisiones confirmadas.
- [Prompt Engineering Patterns](https://skillsagentes.com/skills/wshobson/agents/prompt-engineering-patterns.md): Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.
## Skills relacionadas
- [Architecture Patterns](https://skillsagentes.com/skills/wshobson/agents/architecture-patterns.md): Implementa patrones de arquitectura backend probados: Clean Architecture, Hexagonal Architecture y Domain-Driven Design, para construir sistemas mantenibles, testeables y escalables.
- [Async Python Patterns](https://skillsagentes.com/skills/wshobson/agents/async-python-patterns.md): Domina asyncio, programación concurrente y patrones async/await para apps de alto rendimiento con operaciones no bloqueantes.
- [Changelog Automation](https://skillsagentes.com/skills/wshobson/agents/changelog-automation.md): Automatiza la generación de changelogs a partir de commits, PRs y releases siguiendo el formato Keep a Changelog. Útil al configurar flujos de release o estandarizar convenciones de commits.
- [Cqrs Implementation](https://skillsagentes.com/skills/wshobson/agents/cqrs-implementation.md): Implementa Command Query Responsibility Segregation para arquitecturas escalables; separa modelos de lectura/escritura, optimiza consultas o construye sistemas event-sourced.
- [Dependency Upgrade](https://skillsagentes.com/skills/wshobson/agents/dependency-upgrade.md): Gestiona actualizaciones de versiones mayores de dependencias con análisis de compatibilidad, despliegue escalonado y pruebas exhaustivas.
---
Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)