@input decorator вместо службы внедрения зависимостей в Angular
Насколько я понял, когда есть постоянные данные из базы данных или класса с постоянными значениями, мы должны использовать внедрение зависимостей, потому что мы можем отправить сервис в качестве параметра в конструкторе класса, который мы собираемся создать. Эту службу не нужно создавать, и она не передается в качестве параметра, поскольку она знает, откуда взять данные, и класс, который будет использовать, будет вызывать ее всякий раз, когда она создается.
Но когда информация не постоянна и не постоянна, мы должны использовать декоратор @input в дочернем компоненте и передавать значения параметров, используя html-шаблон родителя.
Например, скажем, что у нас есть матрица
@Component({
selector: 'app-matrix',
})
И у него есть строки и столбцы и строки
export class MatrizComponent implements OnInit {
columnsQuantity:number;
rowsQuantity:number;
}
Допустим, эти строки и столбцы взяты из класса данных Database или Constant, и мы используем сервис для получения этих данных, чтобы мы могли расширить класс с помощью конструктора, который получает сервис
export class MatrixComponent implements OnInit {
columnsQuantity:number;
rowsQuantity:number;
constructor(private service:MatrixService) {
}
}
ngOnInit() {
this.columnsQuantity = this.service.getColumnsQuantity();
this.rowsQuantity = this.service.getRowsQuantity();
}
Когда нам нужно создать экземпляр этого MatrixComponent, мы просто пишем
<app-matrix></app-matrix>
в шаблоне HTML родительского класса. Это потому, что будет такой сервис
import { Injectable } from '@angular/core';
@Injectable()
export class MatrixService {
private columnsQuantity: number;
private rowsQuantity:number;
constructor(private service:SessionInfoService) {
this.columnsQuantity = getColumnsQuantityFromDataBaseOrConstantClass();
this.rowsQuantity = getRowsQuantityFromDataBaseOrConstantClass();
}
getColumnsQuantity() {
return this.columnsQuantity;
}
getRowsQuantity() {
return this.rowsQuantity;
}
}
Служба и внедрение зависимостей имеет смысл, потому что есть способ получить постоянные данные из базы данных или постоянных значений, к которым может получить доступ инъецируемая служба.
В приведенном выше коде rowQuantity и ColumnsQuantity являются постоянными или постоянными.
Но тогда, может ли эта инъекционная служба быть возможной, если rowQuantity и columnsQuantity не являются постоянными или постоянными, и нам всегда нужно будет использовать декоратор @input в MatrixComponent?
В этом случае вместо использования службы в конструкторе мы должны использовать декоратор @input следующим образом:
export class MatrixComponent implements OnInit {
@input() columnsQuantity:number;
@input() rowsQuantity:number;
constructor() {
}
}
ngOnInit() {
}
Когда нам нужно создать экземпляр этого MatrixComponent, мы должны передать параметры
<app-matrix [columnsQuantity]="whateverColumnsValueHasBeenJustGottenAndIsNotPossibleToInject" [rowsQuantity] = "whateverRowssValueHasBeenJustGottenAndIsNotPossibleToInject"></app-matrix>
Всегда ли это так, или я должен пытаться использовать внедрение зависимостей даже с непостоянными или постоянными данными? В случае, если я должен, как я могу это сделать?