← Home

🅰ïļ

⌘K
ðŸĪ–
Claude Code AI Tools
ðŸĪ—
Hugging Face AI Tools
ðŸĶœ
LangChain AI Tools
🧠
Keras AI Tools
ðŸĶ™
Ollama AI Tools
🐍
Python Programming Languages
ðŸŸĻ
JavaScript Programming Languages
🔷
TypeScript Programming Languages
⚛ïļ
React Programming Languages
ðŸđ
Go Programming Languages
ðŸĶ€
Rust Programming Languages
📊
MATLAB Programming Languages
🗄ïļ
SQL Programming Languages
⚙ïļ
C/C++ Programming Languages
☕
Java Programming Languages
ðŸŸĢ
C# Programming Languages
🍎
Swift Programming Languages
🟠
Kotlin Programming Languages
â–ē
Next.js Programming Languages
💚
Vue.js Programming Languages
ðŸ”Ĩ
Svelte Programming Languages
ðŸŽĻ
Tailwind CSS Programming Languages
💚
Node.js Programming Languages
🌐
HTML Programming Languages
ðŸŽĻ
CSS/SCSS Programming Languages
🐘
PHP Programming Languages
💎
Ruby Programming Languages
ðŸ”ī
Scala Programming Languages
📊
R Programming Languages
ðŸŽŊ
Dart Programming Languages
💧
Elixir Programming Languages
🌙
Lua Programming Languages
🐊
Perl Programming Languages
🅰ïļ
Angular Programming Languages
🚂
Express.js Programming Languages
ðŸą
NestJS Programming Languages
ðŸ›Īïļ
Ruby on Rails Programming Languages
◾ïļ
GraphQL Programming Languages
🟊
Haskell Programming Languages
💚
Nuxt.js Programming Languages
🔷
SolidJS Programming Languages
⚡
htmx Programming Languages
ðŸ’ŧ
VS Code Development Tools
🧠
PyCharm Development Tools
📓
Jupyter Development Tools
🧠
IntelliJ IDEA Development Tools
💚
Neovim Development Tools
ðŸ”Ū
Emacs Development Tools
🔀
Git DevOps & CLI
ðŸģ
Docker DevOps & CLI
â˜ļïļ
Kubernetes DevOps & CLI
☁ïļ
AWS CLI DevOps & CLI
🔄
GitHub Actions DevOps & CLI
🐧
Linux Commands DevOps & CLI
ðŸ’ŧ
Bash Scripting DevOps & CLI
🌐
Nginx DevOps & CLI
📝
Vim DevOps & CLI
ðŸ”Ļ
Makefile DevOps & CLI
🧊
Pytest DevOps & CLI
🊟
Windows DevOps & CLI
ðŸ“Ķ
Package Managers DevOps & CLI
🍎
macOS DevOps & CLI
🏗ïļ
Terraform DevOps & CLI
🔧
Ansible DevOps & CLI
⎈
Helm DevOps & CLI
ðŸ”Ļ
Jenkins DevOps & CLI
ðŸ”Ĩ
Prometheus DevOps & CLI
📊
Grafana DevOps & CLI
ðŸ’ŧ
Zsh DevOps & CLI
🐟
Fish Shell DevOps & CLI
💙
PowerShell DevOps & CLI
🔄
Argo CD DevOps & CLI
🔀
Traefik DevOps & CLI
☁ïļ
Azure CLI DevOps & CLI
☁ïļ
Google Cloud CLI DevOps & CLI
📟
tmux DevOps & CLI
🔧
jq DevOps & CLI
✂ïļ
sed DevOps & CLI
📊
awk DevOps & CLI
🌊
Apache Airflow DevOps & CLI
ðŸ”Ē
NumPy Databases & Data
🐞
Pandas Databases & Data
ðŸ”Ĩ
PyTorch Databases & Data
🧠
TensorFlow Databases & Data
📈
Matplotlib Databases & Data
🐘
PostgreSQL Databases & Data
🐎
MySQL Databases & Data
🍃
MongoDB Databases & Data
ðŸ”ī
Redis Databases & Data
🔍
Elasticsearch Databases & Data
ðŸĪ–
Scikit-learn Databases & Data
👁ïļ
OpenCV Databases & Data
⚡
Apache Spark Databases & Data
ðŸŠķ
SQLite Databases & Data
⚡
Supabase Databases & Data
ðŸ”ĩ
Neo4j Databases & Data
ðŸ“Ļ
Apache Kafka Databases & Data
🐰
RabbitMQ Databases & Data
ðŸ”Ī
Regex Utilities
📝
Markdown Utilities
📄
LaTeX Utilities
🔐
SSH & GPG Utilities
🌐
curl & HTTP Utilities
📜
reStructuredText Utilities
🚀
Postman Utilities
🎎
FFmpeg Utilities
🖞ïļ
ImageMagick Utilities
🔍
ripgrep Utilities
🔍
fzf Utilities
📗
Microsoft Excel Office Applications
📘
Microsoft Word Office Applications
📙
Microsoft PowerPoint Office Applications
📝
Hancom Hangul Hancom Office
ðŸ“―ïļ
Hancom Hanshow Hancom Office
📊
Hancom Hancell Hancom Office
📄
Google Docs Google Workspace
📊
Google Sheets Google Workspace
ðŸ“―ïļ
Google Slides Google Workspace
🔌
Cadence Virtuoso EDA & Hardware
⚙ïļ
Synopsys EDA EDA & Hardware
💎
Verilog & VHDL EDA & Hardware
⚡
LTSpice EDA & Hardware
🔧
KiCad EDA & Hardware
📝
Notion Productivity
💎
Obsidian Productivity
💎
Slack Productivity
ðŸŽŪ
Discord Productivity
ðŸŽĻ
Figma Design Tools
📘
Confluence Atlassian
📋
Jira Atlassian
🃏
Jest Testing
⚡
Vitest Testing
🎭
Playwright Testing
ðŸŒē
Cypress Testing
🌐
Selenium Testing
💙
Flutter Mobile Development
ðŸ“ą
React Native Mobile Development
🍎
SwiftUI Mobile Development
ðŸ“ą
Expo Mobile Development
🐍
Django Web Frameworks
⚡
FastAPI Web Frameworks
ðŸŒķïļ
Flask Web Frameworks
🍃
Spring Boot Web Frameworks
ðŸļ
Gin Web Frameworks
⚡
Vite Build Tools
ðŸ“Ķ
Webpack Build Tools
⚡
esbuild Build Tools
🐘
Gradle Build Tools
ðŸŠķ
Maven Build Tools
🔧
CMake Build Tools
ðŸŽŪ
Unity Game Development
ðŸĪ–
Godot Game Development
🔌
Arduino Embedded & IoT
🔍
Nmap Security
🐕
Datadog Monitoring
📖
Swagger/OpenAPI Documentation
No results found
EN KO

Angular CLI

CLI Commands

ng new my-app Create new project
ng serve Start dev server
ng build Build project
ng build --configuration=production Production build
ng test Run unit tests
ng e2e Run e2e tests
ng generate component name Generate component
ng g c name Short form
ng g s name Generate service
ng g m name Generate module
ng g pipe name Generate pipe
ng g directive name Generate directive
ng add @angular/material Add library
ng update Update dependencies

Components

Component Basics

Component decorator
@Component({
  selector: 'app-hello',
  templateUrl: './hello.component.html',
  styleUrls: ['./hello.component.css']
})
export class HelloComponent {
  name = 'World';
}
Inline template
@Component({
  selector: 'app-hello',
  template: `<h1>Hello, {{name}}!</h1>`,
  styles: [`h1 { color: blue; }`]
})
Standalone component
@Component({
  selector: 'app-hello',
  standalone: true,
  imports: [CommonModule],
  template: `...`
})

Input & Output

Input property
@Input() name: string = '';

// In parent template:
<app-child [name]="parentValue"></app-child>
Output event
@Output() clicked = new EventEmitter<string>();

onClick() {
  this.clicked.emit('data');
}

// In parent:
<app-child (clicked)="handleClick($event)"></app-child>
Two-way binding
@Input() value: string = '';
@Output() valueChange = new EventEmitter<string>();

// Usage:
<app-input [(value)]="data"></app-input>

Lifecycle Hooks

ngOnInit
ngOnInit(): void {
  // Called once after first ngOnChanges
}
ngOnChanges
ngOnChanges(changes: SimpleChanges): void {
  // Called when input properties change
}
ngOnDestroy
ngOnDestroy(): void {
  // Cleanup before component is destroyed
}
ngAfterViewInit
ngAfterViewInit(): void {
  // After view is initialized
}

Templates

Template Syntax

Interpolation
{{ expression }}
{{ user.name }}
{{ getValue() }}
Property binding
[property]="expression"
[disabled]="isDisabled"
[src]="imageUrl"
Event binding
(event)="handler()"
(click)="onClick()"
(input)="onInput($event)"
Two-way binding
[(ngModel)]="value"
Attribute binding
[attr.aria-label]="label"
Class binding
[class.active]="isActive"
[ngClass]="{'active': isActive}"
Style binding
[style.color]="textColor"
[ngStyle]="{'color': textColor}"

Structural Directives

*ngIf
<div *ngIf="condition">Shown</div>

<div *ngIf="condition; else elseBlock">True</div>
<ng-template #elseBlock>False</ng-template>
*ngFor
<li *ngFor="let item of items; index as i; trackBy: trackById">
  {{i}}: {{item.name}}
</li>
*ngSwitch
<div [ngSwitch]="value">
  <p *ngSwitchCase="1">One</p>
  <p *ngSwitchCase="2">Two</p>
  <p *ngSwitchDefault>Other</p>
</div>
@if (v17+)
@if (condition) {
  <p>True</p>
} @else {
  <p>False</p>
}
@for (v17+)
@for (item of items; track item.id) {
  <li>{{ item.name }}</li>
} @empty {
  <li>No items</li>
}

Template References

Template variable
<input #myInput>
<button (click)="doSomething(myInput.value)">Click</button>
ViewChild
@ViewChild('myInput') inputRef!: ElementRef;

ngAfterViewInit() {
  this.inputRef.nativeElement.focus();
}
ContentChild
@ContentChild(ChildComponent) child!: ChildComponent;

Services & DI

Services

Injectable service
@Injectable({
  providedIn: 'root'
})
export class DataService {
  getData() {
    return ['a', 'b', 'c'];
  }
}
Inject in component
constructor(private dataService: DataService) {}

// Or using inject function:
private dataService = inject(DataService);

HTTP Client

Import HttpClient
// In app.config.ts or module:
provideHttpClient()
GET request
this.http.get<User[]>('/api/users')
  .subscribe(users => this.users = users);
POST request
this.http.post<User>('/api/users', userData)
  .subscribe(user => console.log(user));
With headers
const headers = new HttpHeaders()
  .set('Authorization', 'Bearer token');

this.http.get('/api/data', { headers });
Error handling
this.http.get('/api/data').pipe(
  catchError(error => {
    console.error(error);
    return of([]);
  })
);

Routing

Route Configuration

Define routes
const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'users', component: UsersComponent },
  { path: 'users/:id', component: UserDetailComponent },
  { path: '**', component: NotFoundComponent }
];
Lazy loading
{
  path: 'admin',
  loadChildren: () => import('./admin/admin.module')
    .then(m => m.AdminModule)
}
Router outlet
<router-outlet></router-outlet>
Router link
<a routerLink="/users">Users</a>
<a [routerLink]="['/users', user.id]">User</a>
Active class
<a routerLink="/users" routerLinkActive="active">Users</a>

Router Service

Navigate
this.router.navigate(['/users', id]);
With query params
this.router.navigate(['/search'], {
  queryParams: { q: 'angular' }
});
Get route params
constructor(private route: ActivatedRoute) {
  this.route.params.subscribe(params => {
    this.id = params['id'];
  });
}
Get query params
this.route.queryParams.subscribe(params => {
  this.query = params['q'];
});

Forms

Template-driven Forms

Basic form
<form #myForm="ngForm" (ngSubmit)="onSubmit(myForm)">
  <input name="email" [(ngModel)]="email" required email>
  <button type="submit" [disabled]="myForm.invalid">Submit</button>
</form>
Validation
<input name="email" [(ngModel)]="email" #emailInput="ngModel" required>
<div *ngIf="emailInput.invalid && emailInput.touched">
  Email is required
</div>

Reactive Forms

Form group
form = new FormGroup({
  email: new FormControl('', [Validators.required, Validators.email]),
  password: new FormControl('', Validators.minLength(6))
});
Form builder
form = this.fb.group({
  email: ['', [Validators.required, Validators.email]],
  password: ['', Validators.minLength(6)]
});
Template
<form [formGroup]="form" (ngSubmit)="onSubmit()">
  <input formControlName="email">
  <input formControlName="password" type="password">
  <button type="submit" [disabled]="form.invalid">Submit</button>
</form>
Get values
this.form.value  // all values
this.form.get('email')?.value  // single value

Pipes

Built-in Pipes

Date
{{ date | date:'yyyy-MM-dd' }}
{{ date | date:'short' }}
Currency
{{ price | currency:'USD' }}
{{ price | currency:'KRW':'symbol' }}
Uppercase/Lowercase
{{ text | uppercase }}
{{ text | lowercase }}
{{ text | titlecase }}
Async
{{ observable$ | async }}
JSON
{{ object | json }}
Slice
{{ items | slice:0:5 }}

Custom Pipe

Create pipe
@Pipe({
  name: 'truncate',
  standalone: true
})
export class TruncatePipe implements PipeTransform {
  transform(value: string, limit: number = 20): string {
    return value.length > limit
      ? value.substring(0, limit) + '...'
      : value;
  }
}
Usage
{{ longText | truncate:50 }}

Signals (v16+)

Signal Basics

Create signal
count = signal(0);
Read value
this.count()  // 0
Set value
this.count.set(5);
Update
this.count.update(v => v + 1);
Computed
doubleCount = computed(() => this.count() * 2);
Effect
effect(() => {
  console.log('Count:', this.count());
});
In template
<p>Count: {{ count() }}</p>
<p>Double: {{ doubleCount() }}</p>