the official Ionic 2 forum में मैंने पाया कि आप
@App खुद को इसकी सुई चाहिए, फिर @Page में आयात इसका इस्तेमाल करने की।
इसका कारण यह है आयोनिक अपने अनुप्रयोग bootstrapping के लिए कोणीय 2 के रूप में एक ही प्रक्रिया का उपयोग नहीं करता है, और @App डेकोरेटर सिंगलटन सेवाओं है कि सभी पृष्ठों के लिए स्वचालित रूप से उपलब्ध हैं बनाने की क्षमता प्रदान नहीं करता है और आपके आवेदन में घटक; इसलिए तार्किक उपयोग आपकी ऐप.नेट और उस पृष्ठ में आपकी सेवा को इंजेक्ट करना है जिसमें आप इसका उपयोग करने जा रहे हैं ... अच्छा, इस तरह का व्यवहार होना चाहिए ... मेरे मामले में (मैं आयनिक 2 के साथ काम कर रहा हूं बीटा 5) यह काम नहीं करता है, अगर आप ऐसा करते हैं और @App और @Page अपनी सेवा के साथ इंजेक्ट करते हैं (दोनों उन्हें आयात करते हैं और प्रदाता सरणी का उपयोग करते हैं, तो यह दो अलग-अलग सेवाएं बनाएगा, जो मेरे मामले में है इतना अच्छा नहीं है क्योंकि मैं App.ts में अपनी सेवा के लिए मूल्य निर्धारित कर रहा हूं और अपने कुछ पृष्ठों में उन मानों को पुनर्प्राप्त कर रहा हूं। इसलिए, यदि आपको सिंगलटन व्यवहार की आवश्यकता है, तो मेरे लिए जाने का तरीका ओल का उपयोग करके सिंगलटन सेवा बनाना था 'इस तरह चार पैटर्न का गिरोह ..
आपकी सेवा में ...
export class Globals {
//----------------------------------------------------------------------------------------------
// Static (Singleton Implementation) Properties Section:
//----------------------------------------------------------------------------------------------
static instance : Globals;
static isCreating : Boolean = false;
//----------------------------------------------------------------------------------------------
// Private Properties Section:
//----------------------------------------------------------------------------------------------
private screenWidth : number;
private screenHeight : number;
//----------------------------------------------------------------------------------------------
// Constructor Method Section:
//----------------------------------------------------------------------------------------------
constructor()
{
if (!Globals.isCreating)
{
throw new Error("No se puede llamar a esta clase con 'new' - Utiliza getInstance()");
}
}
//----------------------------------------------------------------------------------------------
// (Singleton Implementation) getInstance() Method:
//----------------------------------------------------------------------------------------------
static getInstance() : Globals
{
if (Globals.instance == null)
{
Globals.isCreating = true;
Globals.instance = new Globals();
Globals.isCreating = false;
}
return Globals.instance;
}
//----------------------------------------------------------------------------------------------
// Properties Section (ScreenWidth):
//----------------------------------------------------------------------------------------------
getScreenWidth() : number
{
return this.screenWidth;
}
//----------------------------------------------------------------------------------------------
setScreenWidth(val) : void
{
this.screenWidth = val;
}
//----------------------------------------------------------------------------------------------
// Properties Section (ScreenHeight):
//----------------------------------------------------------------------------------------------
getScreenHeight() : number
{
return this.screenHeight;
}
//----------------------------------------------------------------------------------------------
setScreenHeight(val) : void
{
this.screenHeight = val;
}}
फिर भी आप इसका इस्तेमाल करने की जरूरत है ...
- आयात यह पहली
import {Globals} from './services/globals';
- एक निजी संपत्ति बनाने के लिए आपकी सेवा
के लिए एक संदर्भ पकड़ करने के लिए globals: Globals;
- जब से हम @Injectable() उपयोग नहीं कर रहे हम निर्माता में हमारी सेवा नहीं डालने चाहिए, तथापि के getInstance() विधि का उपयोग कर एक उदाहरण बनाने के लिए इस लाइन जोड़ने और इसे हमारी निजी संपत्ति को सौंपें।
this.globals = Globals.getInstance();
- अब आप अपने कोड में एक सिंगलटन के रूप में अपनी सेवा का उपयोग कर सकते हैं।
ngOnInit()
{
// Device Dimensions:
let that : any = this;
screensize.get().then((result) => {
setTimeout(()=> {
that.globals.setScreenWidth(result.width);
that.globals.setScreenHeight(result.height);
},50);
},
(error) => {
// Do Nothing yet...
});
}
मैं बिल्कुल बताया गया हो कि मैंने किया है क्योंकि मुझे पता है कि मेरे जैसे, वहाँ डेवलपर्स अभी भी आयोनिक 2 और कोणीय 2 में एक पकड़ हो रही के बहुत सारे हैं में एक छोटे से वर्बोज़ किया गया है, यह टन की लागत एक मंच सीखने के लिए घंटों के लिए और इस तरह के मुद्दों के साथ आप सचमुच चीजों को समझने के लिए दिन बिता सकते हैं, मुझे उम्मीद है कि यह समाधान आपके लिए काम करेगा और मुझे पता है कि अब तक यह अप्रचलित हो सकता है क्योंकि आयनिक 2 बीटा 6 अभी जारी किया गया था, मेरी सलाह है कि आप दोनों समाधानों का परीक्षण करें, पहले फोरम में से एक और यदि वह काम नहीं करता है, तो यह मेरे लिए काम करता है और मुझे आशा है कि इससे चीजें आपके लिए भी काम कर सकती हैं।
शायद सबसे अच्छा तरीका है एक इंजेक्शन सेवा है कि आवेदन के इंजेक्टर में कॉन्फ़िगर किया गया है करने के लिए किया जाएगा। – toskv