एक नमूदार आपको केवल सदस्यता लेने की अनुमति देता है जबकि एक विषय आपको प्रकाशित और सदस्यता दोनों की अनुमति देता है।
तो एक विषय आपकी सेवाओं को एक प्रकाशक और ग्राहक दोनों के रूप में उपयोग करने की अनुमति देता है ।
अब तक, मैं इतना अच्छा नहीं हूँ Observableइसलिए मैं इसका केवल एक उदाहरण साझा करूँगा Subject।
आइए एक कोणीय सीएलआई उदाहरण के साथ बेहतर समझें । नीचे दिए गए आदेश चलाएँ:
npm install -g @angular/cli
ng new angular2-subject
cd angular2-subject
ng serve
की सामग्री को इसके app.component.htmlसाथ बदलें :
<div *ngIf="message">
{{message}}
</div>
<app-home>
</app-home>
ng g c components/homeहोम कंपोनेंट जेनरेट करने के लिए कमांड रन करें । की सामग्री को इसके home.component.htmlसाथ बदलें :
<input type="text" placeholder="Enter message" #message>
<button type="button" (click)="setMessage(message)" >Send message</button>
#messageयहाँ स्थानीय चर है। एक संपत्ति message: string;
को app.component.tsवर्ग में जोड़ें।
यह आदेश चलाएँ ng g s service/message । यह पर एक सेवा उत्पन्न करेगा src\app\service\message.service.ts। इस सेवा को ऐप को प्रदान करें ।
आयात SubjectमेंMessageService । एक विषय भी जोड़ें। अंतिम कोड इस तरह दिखेगा:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class MessageService {
public message = new Subject<string>();
setMessage(value: string) {
this.message.next(value); //it is publishing this value to all the subscribers that have already subscribed to this message
}
}
अब, इस सेवा को इसमें इंजेक्ट करें home.component.tsऔर इसका एक उदाहरण कंस्ट्रक्टर को दें। इसके लिए app.component.tsभी करें। #messageसेवा फ़ंक्शन के मान को पास करने के लिए इस सेवा उदाहरण का उपयोग करेंsetMessage :
import { Component } from '@angular/core';
import { MessageService } from '../../service/message.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent {
constructor(public messageService:MessageService) { }
setMessage(event) {
console.log(event.value);
this.messageService.setMessage(event.value);
}
}
अंदर app.component.ts, सदस्यता और सदस्यता समाप्त (स्मृति लीक को रोकने के लिए)Subject :
import { Component, OnDestroy } from '@angular/core';
import { MessageService } from './service/message.service';
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent {
message: string;
subscription: Subscription;
constructor(public messageService: MessageService) { }
ngOnInit() {
this.subscription = this.messageService.message.subscribe(
(message) => {
this.message = message;
}
);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
बस।
अब, किसी भी मूल्य के अंदर प्रवेश किया #messageके home.component.htmlलिए मुद्रित किया जाएगा {{message}}अंदरapp.component.html