Burchak2 - Xato: IconService uchun barcha parametrlarni hal qila olmaydi

Men ilovani AOT derivatsiyasiga o'tkazishga harakat qilaman va ilovani yuklayotganida bu xatoni ishlab chiqarish muhitida olishmoqda (u mahalliy darajada ishlaydi).

Xato: IconService uchun barcha parametrlarni bartaraf etilmaydi: (?,?)

IconService xizmatini taqdim etadigan modullarda xato paydo bo'lishi kabi ko'rinadi. Belgilar xizmatlarining konstruktori o'xshaydi

constructor (maxsus http: Http, maxsus ikonko'ngil: IconConfiguror) {

Shuning uchun mening savolim bu xatolik nimani anglatadi va nima uchun faqat prod muhitida yuz berishi mumkin edi (men prod rejimini mahalliy darajada faollashtirmoqchi bo'ldim)?

Bu shuni anglatadiki, http va ikonkaning konfiguratsiya parametrlari ta'minlanmagan, ammo ikonkasi konfiguratsiyasi app modul darajasida taqdim etiladi va ICTMODUL kodi IconModule bu erda IconService berilgan.

@NgModule({
    imports: [
        CommonModule,
        HttpModule,
    ],
    declarations: [
        IconComponent,
    ],
    exports: [
        IconComponent,
    ],
    providers: [
        IconService,
        __platform_browser_private__.BROWSER_SANITIZATION_PROVIDERS,
    ],
})

Va bizning ikonkomponentimiz uchun barrel.

export * from "./components/icon/icon.configuror";

export * from "./components/icon/icon.service.provider";

export * from "./components/icon/icon.service";

export * from "./components/icon/icon.component";

export * from "./components/icon/icon.module";
5
constructor (xususiy http: Http, maxsus ikonko'ngil: IconConfiguror)
qo'shib qo'ydi muallif AJT_82, manba
__ dekoratsiya to'g'ri bo'lsa, u erda AOK qilinmasligi kerak. IconConfiguror xizmatini qanday taqdim qilasiz?
qo'shib qo'ydi muallif altschuler, manba
Bochkalarni ishlatasizmi?
qo'shib qo'ydi muallif altschuler, manba
@ AJT_82 buni yangilashni unutdi, men ham buni qildim.
qo'shib qo'ydi muallif tallkid24, manba
@altschuler app.module ichida {berish: IconConfiguror, useClass: IconConfigurorImpl}, . IconConfigurorImpl ning o'zi @Injectable() eksport klassi IconConfigurorImpl IconConfiguror {
qo'shib qo'ydi muallif tallkid24, manba
@altschuler ha biz
qo'shib qo'ydi muallif tallkid24, manba
Postga barrel konfiguratsiyasi qo'shilgan.
qo'shib qo'ydi muallif tallkid24, manba

6 javoblar

IconService sinfini @Injectable() bilan bezamasangiz, ushbu xatoning sababi bo'lishi mumkin. Buning sababi bo'lsa, sinf deklaratsiyasi ustida bezakni qo'shish xatoni tuzatadi.

5
qo'shib qo'ydi

IconService xizmatini boshqa usul bilan taqdim qilib, bu ishni to'xtatdi.

    {
        provide: IconService,
        useFactory: iconServiceFactory,
        deps: [Http, IconConfiguror],
    },

va zavodning o'zi

export function iconServiceFactory(http: Http, iconConfiguror: IconConfiguror) {
    return new IconService(http, iconConfiguror);
}

Nima uchun Http (HttpModule import qilingan bo'lsa-da) taqdim etilmagan bo'lsa kerak, deb o'ylayman, shuning uchun men uni qaramlik deb e'lon qilishim kerak edi.

5
qo'shib qo'ydi

Men shunga o'xshash muammoga duch kelganman. Men uni barrelda eksport tartibini o'zgartirib, hal qildim.

Asosiy xizmat fayllari:

// dependency.service.ts
@Injectable()
export class DependencyService { }

// dependant.service.ts
import { DependencyService } from '.';

@Injectable()
export class DependantService {
    constructor(private dependency: DependencyService) { }
}

Quyida ko'rsatilgan namlum xato yuzaga keladi:

// index.ts
export * from './dependant.service';
export * from './dependency.service';

Quyidagi ishlarni bajarayotganda:

// index.ts
export * from './dependency.service';
export * from './dependant.service';
2
qo'shib qo'ydi
@JacquesCornat Men buni o'rganmaganman. Hech bo'lmasa men qaramlik tartibining to'g'ri bo'lishi kerakligini mantiqan bilaman. Ammo dekorativlarni qanday qilib ishlayotganidan shubhalanaman.
qo'shib qo'ydi muallif LoganMzz, manba
Men bu masalani boshdan kechirdim va nima uchun bu sodir bo'layotganini bilasizmi?
qo'shib qo'ydi muallif Jacques Cornat, manba

Ba'zan uni tuzatishning yagona yo'li - parametrlarni qo'lda tasvirlash.

static get parameters() { return [Http, IconConfiguror] }

constructor(private http:Http, private iconConfiguror:IconConfiguror) {
1
qo'shib qo'ydi

Mening asosiy muammoim - asosiy sinfdan meros bo'lib o'tganim, va shu asosiy sinfni @Injectable bilan bezatdim. Himoyalash klassi asosiy sinfga emas, @Injectable atributiga ega bo'lishi kerak bo'lgan sinf edi. Derleyici, @Injectable attibute ko'rganida, konstruktordagi barcha funktsiyalarning AOKlanishi mumkinligini tekshiradi. Aks holda, bu xato. Men u sinfdan @ Injectable attibutni olib tashlab, uni hal qildim.

0
qo'shib qo'ydi

Xizmatni app.module.ts ilovasida import qilishda foydalanilganimda men uchun ishladi

{provide: AuthService,
    depends: HttpClientModule}
0
qo'shib qo'ydi
Angular Uzbekistan
Angular Uzbekistan
107 ishtirokchilar

Guruh Angular bo'yicha muloqot qilish uchun ochilgan Sizni qiziqtirsa: @nodejs_uz @react_uz @angular_uz @yiiframework_uz @js_uzb @typescript_uzb @vuejs_uz @ngTashkent @laravel_uz @uzdevgroup Ish o'rinlari @UzDev_jobs

ngTashkent
ngTashkent
77 ishtirokchilar

Правила просты: 1. Не хамить 2. Не хейтить 3. Реакт не нужен Ссылки: https://t.me/angular_ru - старший брат https://t.me/angular_uz - ангулар на узбекском @js_uzb @vuejs_uz @react_uz @nodejs_uz @yiiframework_uz @uzdevgroup @UzDev_Jobs @tasdev_talks