#angular #dependency-injection #angular9 #angular-module #ngxs
#angular #внедрение зависимостей #angular9 #angular-модуль #ngxs
Вопрос:
Мне нужно вызвать функцию из sharedService из app.module. Обычно мы делаем это, добавляя внедрение зависимостей и вызывая его внутри класса. Но мой случай здесь другой. Я хочу установить значение из файла службы, когда хранилище ngxs добавляется в качестве поставщика в app.module. У меня нет другого варианта, кроме вызова функции getAcceptedValue() из sharedService, чтобы получить желаемое значение. Я хочу вызвать performStoreOperations в части providers модуля.
import {SharedService} from './shared.service';
@NgModule({
imports: [
NgxsModule.forFeature([
AuthState,
]),
NgxsResetPluginModule.forRoot(),
SharedModule,
NgxsReduxDevtoolsPluginModule.forRoot(),
],
declarations: [AppComponent],
bootstrap: [AppComponent],
providers: [
{
provide: NGXS_PLUGINS,
useValue: performStoreOperations, // How to call performStoreOperations function here ???????
multi: true,
},
],
})
export class AppModule {
constructor(private shared:SharedService){}
performStoreOperations(state, action, next) {
{
let acceptedValue = this.shared.getAcceptedValue();
localStorage.setItem('test',acceptedValue);
return next(state, action);
}
}
Кто-нибудь может помочь?
Комментарии:
1. Во-первых, вам нужно предоставить сервис в его корневом модуле в NgModule
providers:[]
, а затем просто импортировать модуль в свой модуль reqd или просто импортировать сервис в свой компонент2. Может
useFactory
быть, вместо этого использовать и вызывать функцию непосредственно из службы?3. @matsch Я тоже пробовал использовать фабричный метод. Но когда мы используем useFactory, нам придется включать зависимости. Я смог добавить зависимость в качестве deps . Но при вызове этой функции из службы возникает ошибка циклической зависимости.
Ответ №1:
Вы можете сделать это следующим образом.
SharedService из модуля A
scroll(el: HTMLElement, behaviour: any = "smooth", block: any = "start", inline: any = "nearest") {
el.scrollIntoView({ behavior: behaviour, block: block, inline: inline })
}
Модуль A
@NgModule({
declarations: [],
imports: [//some components],
exports: [//some components],
providers: [
SharedService,
]
})
export class SharedModule { }
some.component.ts
import {sharedService} from 'your/path/t
constructor(private sharedService: SharedService){}
//do something with this.sharedService.scroll(param1,...........etc)
Комментарии:
1. Спасибо за ответ. Но моя проблема не в вызове службы из компонента. Я хочу вызвать ее непосредственно из модуля.