खोज…


टिप्पणियों

साझा सेवाओं का उपयोग करने के बारे में एक बहुत महत्वपूर्ण बात यह है कि उन्हें शीर्ष-सबसे घटक के providers सरणी में शामिल किया जाना चाहिए जहां उन्हें साझा किया जाना चाहिए।

ऐसा क्यों है? ठीक है, मान लें कि हम प्रत्येक Component से providers सरणी में MyService संदर्भ शामिल करते हैं। कुछ इस तरह:

@Component({
  templateUrl:"page1.html",
  providers: [MyService]
})

तथा

@Component({
  templateUrl:"page2.html",
  providers: [MyService]
})

इस तरह से प्रत्येक घटक के लिए सेवा का एक नया उदाहरण बनाया जाएगा ताकि उदाहरण जहां एक पृष्ठ डेटा बचाएगा, डेटा प्राप्त करने के लिए उपयोग किए जाने वाले उदाहरण से अलग होगा। तो वह काम नहीं करेगा।

संपूर्ण एप्लिकेशन को एक ही उदाहरण (सेवा कार्य को एक सिंगलटन सेवा के रूप में) बनाने के लिए हम इसका संदर्भ App Component में इस तरह जोड़ सकते हैं:

@Component({
  template: '<ion-nav [root]="rootPage"></ion-nav>',
  providers: [MyService]
})

आप ionicBootstrap(MyApp, [MyService]); में MyService संदर्भ भी जोड़ सकते हैं ionicBootstrap(MyApp, [MyService]); लेकिन Angular2 शैली गाइड के अनुसार

शीर्ष-सबसे घटक में कोणीय 2 इंजेक्टर पर सेवाएं प्रदान करें जहां उन्हें साझा किया जाएगा।

क्यों? कोणीय 2 इंजेक्टर श्रेणीबद्ध है।

क्यों? शीर्ष स्तर के घटक को सेवा प्रदान करते समय, वह उदाहरण साझा किया जाता है और उस शीर्ष स्तर के घटक के सभी बाल घटकों के लिए उपलब्ध होता है।

क्यों? यह आदर्श है जब कोई सेवा तरीकों या राज्य को साझा कर रही है।

क्यों? यह आदर्श नहीं है जब दो अलग-अलग घटकों को एक सेवा के विभिन्न उदाहरणों की आवश्यकता होती है। इस परिदृश्य में सेवा को नए और अलग उदाहरण की आवश्यकता वाले घटक स्तर पर प्रदान करना बेहतर होगा।

तथा

यह काम करेगा। यह सिर्फ एक सर्वोत्तम अभ्यास नहीं है। बूटस्ट्रैप प्रदाता का विकल्प एंगुलर की अपनी पूर्वापेक्षित सेवाओं को कॉन्फ़िगर करने और ओवरराइड करने के लिए है , जैसे इसका रूटिंग समर्थन।

... App Component सबसे अच्छा विकल्प होगा।

विभिन्न पृष्ठों के बीच जानकारी साझा करें

साझा सेवाओं का उपयोग करने के सबसे आसान उदाहरणों में से एक है जब हम अपने एप्लिकेशन के दिए गए पृष्ठ से कुछ डेटा संग्रहीत करना चाहते हैं, और फिर उस डेटा को फिर से लेकिन किसी अन्य पृष्ठ से प्राप्त करें।

एक विकल्प उस डेटा को एक पैरामीटर के रूप में भेजने के लिए हो सकता है (उदाहरण के लिए, यदि एक पृष्ठ दूसरे को कॉल करता है), लेकिन अगर हम उस डेटा को एप्लिकेशन के पूरी तरह से भिन्न भाग से उपयोग करना चाहते हैं, तो ऐसा करना सबसे अच्छा तरीका नहीं लगता है यह। जब साझा सेवाओं को खेलना आता है।

इस उदाहरण में, हम एक सरल सेवा कहा जाता है का उपयोग करने के लिए जा रहे हैं MyService : जो केवल दो सरल तरीके है saveMessage() एक स्ट्रिंग और स्टोर करने के लिए getMessage() इसे फिर से प्राप्त करने के लिए। यह कोड इस कार्य प्लंकर का हिस्सा है जहां आप इसे कार्रवाई में देख सकते हैं।

import {Injectable} from '@angular/core';

@Injectable()
export class MyService { 
  
  private message: string;
  
  constructor(){ }
  
  public saveMessage(theMessage: string): void {
    this.message = theMessage;
  }
  
  public getMessage(): string {
    return this.message;
  }
}

फिर, जब हम एक नया संदेश संग्रहीत करना चाहते हैं, तो हम केवल saveMessage(theMessageWeWantToSave); उपयोग कर सकते हैं saveMessage(theMessageWeWantToSave); MyService उदाहरण (सिर्फ service कहा जाता है) से विधि।

import { Component } from "@angular/core";
import { MyService } from 'service.ts';

@Component({
  templateUrl:"page1.html"
})
export class Page1 {
  
  message: string;
  
  // ... 
   
  public saveSecretMessage(): void {
    this.service.saveMessage(this.message);
  }      
}

उसी तरह, जब हम उस डेटा को प्राप्त करना चाहते हैं, तो हम इस तरह से सेवा उदाहरण से getMessage() विधि का उपयोग कर सकते हैं:

import { Component } from "@angular/core";
import { MyService } from 'service.ts';

@Component({
  templateUrl:"page2.html"
})
export class Page2 {
  
  enteredMessage: string;
  
  constructor(private service: MyService) {
    this.enteredMessage = this.service.getMessage();
  }
    
  // ...
}

कृपया यह देखने के लिए रिमार्क्स अनुभाग देखें कि MyService सेवा के लिए संदर्भ कहाँ और क्यों शामिल होना चाहिए।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow