@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>

Всегда ли это так, или я должен пытаться использовать внедрение зависимостей даже с непостоянными или постоянными данными? В случае, если я должен, как я могу это сделать?

0 ответов

Другие вопросы по тегам