एक नमूदार आपको केवल सदस्यता लेने की अनुमति देता है जबकि एक विषय आपको प्रकाशित और सदस्यता दोनों की अनुमति देता है।
तो एक विषय आपकी सेवाओं को एक प्रकाशक और ग्राहक दोनों के रूप में उपयोग करने की अनुमति देता है ।
अब तक, मैं इतना अच्छा नहीं हूँ 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