angular कोणीय-घटकों के बीच साझा सेवा काम नहीं करती है




variables service (2)

मेरे पास एक सेवा है जहां मैं अपना चर घोषित करता हूं। मेरे घटक में मैं इस चर का उपयोग इसमें डेटा डालने के लिए करता हूं।

सर्विस:

@Injectable()
export class DataService {

    public msgs = [];

    constructor() { }       

}

अब मैं अपने घटक में इस चर का उपयोग करता हूं:

export class MessagesComponent implements OnInit {   

    constructor(private dataService: DataService){}

    ngOnInit() {   
        this.getData();   
    }

    getData(){
        let msgs = [];

        if (diffr <= this.geomessage[i].range) {
            this.geomessage[i].dist = diffr;
            msgs.push(this.geomessage[i]);
            //console.log("this message: ", this.geomessage[i]); //DEBUG
        }
        this.dataService.msgs = msgs;

    }    
}    

मैंने केवल आवश्यक कोड पोस्ट किया है। इस. this.dataService.msgs het ने उन संदेशों को भरा है जो यह ठीक काम करता है। जब मुझे एक अन्य घटक मिला, तो इस.dataService.msgs का डेटा अभी भी मौजूद है, लेकिन जब मैं वापस Messagescomponent करता this.dataService.msgs , तो इस Messagescomponent को फिर से भरने तक, यह तब तक undefined रहता है, जब तक मुझे इसमें मौजूद डेटा की आवश्यकता नहीं होती। किसी को पता है कि यह कैसे करना है?

धन्यवाद


इकोनैक्स के उत्तर पर बस एक त्वरित विस्तार, यह है कि प्रदाता एक पदानुक्रम के रूप में काम करता है। यदि आप इसे ऐप-मॉड्यूल में जोड़ते हैं, तो यह पूरे ऐप पर काम करेगा, और इसलिए आपको इसे कहीं और 'प्रदान' नहीं करना चाहिए। हालांकि, अगर 'वैश्विक स्तर पर' सेवा की जरूरत नहीं है, तो बस इसे मूल घटक पर प्रदान करें।


यदि आप अपने @Component को अपने @Component एनोटेशन के प्रदाता सरणी के अंदर प्रदान कर रहे हैं,

@Component({
    ...
    providers: [DataService],
})...

यह घटक इस घटक के लिए एक सिंगलटन (यह एक नया उदाहरण बनाएगा) होगा (और यह बच्चे हैं यदि उन्होंने अपने एनोटेशन के तहत भी यह सेवा प्रदान नहीं की है)।

यदि आप कई घटकों के बीच इस सेवा का उपयोग करना चाहते हैं और सेवा का एक ही उदाहरण साझा करना चाहते हैं; आपको इस सेवा को एक घटक / मॉड्यूल में प्रदान करना होगा जो कि डीआई ट्री में इन घटकों का जनक है। यदि यह एक वैश्विक सेवा है तो मैं इसे केवल आपके AppModule (या एक साझा मॉड्यूल में) प्रदान करने का सुझाव देता हूं।

@NgModule({
    providers:[DataService]
})






sharedservices