मैं अपने प्रोजेक्ट में एक वेब और मोबाइल ऐप संस्करण के बीच कोड शेयर करने का प्रयास कर रहा हूं।

मेरे पास एक घटक है जिसके लिए प्रोग्रामेटिक नेविगेशन की आवश्यकता है और इसलिए मुझे वेब संस्करण के लिए कोणीय राउटर ('@ कोणीय/राउटर' से) और मोबाइल संस्करण के लिए नेटिवस्क्रिप्ट राउटर एक्सटेंशन ('@ नेटिवस्क्रिप्ट/कोणीय' से) इंजेक्ट करने की आवश्यकता है। क्या किसी घटक में निर्भरता को "गतिशील रूप से" इंजेक्ट करने का कोई अनुशंसित तरीका है, ताकि संकलित किए गए प्रत्येक लक्ष्य को सही निर्भरता प्राप्त हो?

0
Pablo Oliva 5 जिंदा 2021, 18:52

1 उत्तर

सबसे बढ़िया उत्तर

पहले चरण में आपको एक इंजेक्शन टोकन बनाना चाहिए

// src/app/tokens.ts
import {InjectionToken} from '@angular/core';

export const UNIVERSAL_ROUTER = new InjectionToken<string>('Custom router');

उसके बाद आपके मॉड्यूल में जो वेब एप्लिकेशन से संबंधित है (मुझे लगता है कि यह app.module.ts है) आप इसे अपनी प्रदाताओं की सूची में परिभाषित करते हैं

// src/app/app.module.ts
...
import {Router, RouterModule} from '@angular/router';
import {UNIVERSAL_ROUTER} from '~/app/tokens';

@NgModule({
    imports: [...],
    declarations: [...],
    providers: [
        {provide: UNIVERSAL_ROUTER, useExisting: Router},
    ],
    bootstrap: [AppComponent],
})
export class AppModule {}

इसके साथ ही आप इस टोकन को मॉड्यूल में RouterExtension के रूप में परिभाषित करते हैं जो मोबाइल एप्लिकेशन (यानी app.module.tns.ts) के लिए कहता है:

// src/app/app.module.tns.ts
...
import {NativeScriptRouterModule, RouterExtensions} from 'nativescript-angular/router';
import {UNIVERSAL_ROUTER} from '~/app/tokens';

@NgModule({
    imports: [...],
    declarations: [...],
    providers: [
        {provide: UNIVERSAL_ROUTER, useClass: RouterExtensions},
    ],
    bootstrap: [AppComponent],
    schemas: [NO_ERRORS_SCHEMA],
})
export class AppModule {}

ऐसा करने के बाद, आप @Inject डेकोरेटर जैसे . के माध्यम से राउटर को इंजेक्ट कर सकते हैं

constructor(@Inject(UNIVERSAL_ROUTER) private router) {}

और जहां भी आपको इसकी आवश्यकता हो, एक प्लेटफ़ॉर्म-विशिष्ट राउटर प्राप्त करें।

1
Sergey Mell 1 फरवरी 2021, 15:39