Отправить параметр из компонента в конструктор службы в angular 6

Я новичок в angular6, когда я отправляю параметр из компонента в службу, я получаю StaticInjectorError. Что случилось?

Мой код выглядит примерно так компонент:

import { Component, Input, OnInit } from '@angular/core';
import { myService } from '../../@core/data/myService';
@Component({
  selector: 'table',
  templateUrl: './table.component.html'
})
export class TableComponent implements OnInit {
  constructor(private service: myService) {
  }
  ngOnInit() {
    this.service = new myService ("name");
}

услуга:

 import { Injectable, Inject } from '@angular/core';
    import { Observable } from 'rxjs/Observable';
    import { DataService } from './data.service';

    @Injectable() export class myService {

        constructor(
            entityName: string,
        ) {
            console.info(entityName);
        }
    }

app.module.ts:

import { myService } from './@core/data/myService '
import { TableModule } from './pages/table/table.module';

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    AppRoutingModule,

    NgbModule.forRoot(),
    ThemeModule.forRoot(),
    CoreModule.forRoot(),
  ],
  bootstrap: [AppComponent],
  providers: [
    myService,
    TableModule
  ],
})
export class AppModule {
}

сообщение об ошибке: ProductsComponent.html: 1 ОШИБКА Ошибка: StaticInjectorError (AppModule) [BDBaseService -> String]: StaticInjectorError (Платформа: ядро) [BDBaseService -> String]: NullInjectorError: нет поставщика для String! в NullInjector.push ../ node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js: 979) в resolveToken (core.js: 1232) в tryResolveToken (core.js: 1182) в StaticInjector.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 1077) в resolveToken (core.js: 1232) в tryResolveToken (core.js: 1182) в StaticInjector.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 1077) в resolveNgModuleDep (core.js: 9238) в _createClass (core.js: 9283) в _createProviderInstance $ 1 (core.js: 9255)

Покажите вам файл app.module.ts.

Karnan Muthukumar 09.08.2018 08:01
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
4
1
5 676
1

Ответы 1

Вы не делаете this.service = new myService ("name");. Услуга создается в тот момент, когда она где-то предоставляется. В вашем случае в app.module.ts. Это означает, что во всем приложении будет использоваться только один экземпляр этой службы. Если вам нужно несколько экземпляров, вы должны предоставить их снова в модуле или компоненте. Если услуга предоставляется несколько раз на разных уровнях (например, как в app.module, так и в компоненте), используется услуга, предоставляемая на самом низком уровне.

Чтобы предоставить услугу в компоненте, просто добавьте строку в свой декоратор @Component:

@Component({
    selector: 'table',
    templateUrl: './table.component.html',
    providers: [myService], // <---
})

Если вам абсолютно необходимо передать какое-то значение этой службе во время ее создания, см. этот ответ (я надеюсь, что это все еще актуально)

Да, кстати, не используйте селектор table. Для очевидные причины

Mintenker 09.08.2018 09:59

Не уверен, как это решает вопрос. Речь идет о службах с параметризованными конструкторами, а не о том, как создать экземпляр службы.

lloydaf 14.08.2019 16:35

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