Skip to content

Instantly share code, notes, and snippets.

View arturovt's full-sized avatar
🎯

Artur arturovt

🎯
View GitHub Profile
import { Component, ChangeDetectionStrategy } from '@angular/core';
@Component({
selector: 'app-button',
templateUrl: './button.component.html',
styleUrls: ['./button.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ButtonComponent {
@Input()
export class CountriesService implements Mutateble<Country> {
public mutateSource(
countries: Country[],
key: keyof Country,
value: Country[keyof Country]
): Country[] {
countries.forEach((country) => {
country[key] = value;
}); // BAD
const userToRemoveIndex = this.users.indexOf(user);
this.users = this.users.filter((_, index) => {
return index !== userToRemoveIndex;
}); // BAD
this.users = [
...this.users.slice(0, userToRemoveIndex),
...this.users.slice(userToRemoveIndex + 1)
]; // BAD
function reducer(state: number[]) {
const newState = [...state]; // BAD
const newState = [].concat(state); // BAD
const newState = state.slice(); // BEST
}
export class ChartComponent {
public async ngOnInit(): Promise<void> {
const { Chart } = await import('chart.js');
this.zone.runOutsideAngular(() => {
new Chart(...);
});
}
}
{
"extends": "../tsconfig.json",
"compilerOptions": {
"module": "esnext"
}
}
@Injectable()
export class TodosResolver implements Resolve<Todo[]> {
private todos: Todo[] = [];
constructor(private todoService: TodoService) {}
public resolve(): Todo[] | Observable<Todo[]> {
if (this.todos.length) {
return this.todos;
}
const routes: Routes = [
{
path: 'todos',
component: TodosComponent,
resolve: {
todos: TodosResolver
}
}
];
@Injectable()
export class TodosResolver implements Resolve<Todo[]> {
constructor(private todoService: TodoService) {}
public resolve(): Observable<Todo[]> {
return this.todoService.getTodos();
}
}
import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-todos',
template: `
<app-todo *ngFor="let todo of todos" [todo]="todo"></app-todo>
`
})
export class TodosComponent {