Bir gözlemlenebilir bir oysa sadece abone olmalarını sağlar konu hem yayınlamak ve abone olmanızı sağlar.
Böylece konu, hizmetlerinizin hem yayıncı hem de abone olarak kullanılmasına izin verir .
Şu an itibariyle o kadar iyi değilim, Observable
bu yüzden sadece bir örneğini paylaşacağım Subject
.
Açısal bir CLI örneğiyle daha iyi anlayalım . Aşağıdaki komutları çalıştırın:
npm install -g @angular/cli
ng new angular2-subject
cd angular2-subject
ng serve
İçeriğini değiştir app.component.html
:
<div *ngIf="message">
{{message}}
</div>
<app-home>
</app-home>
ng g c components/home
Ana bileşeni oluşturmak için komutu çalıştırın . İçeriğini değiştir home.component.html
:
<input type="text" placeholder="Enter message" #message>
<button type="button" (click)="setMessage(message)" >Send message</button>
#message
burada yerel değişkendir. Adlı message: string;
kişinin app.component.ts
sınıfına bir özellik ekleyin .
Bu komutu çalıştırın ng g s service/message
. Bu, adresinde bir hizmet oluşturur src\app\service\message.service.ts
. Bu hizmeti uygulamaya sağlayın .
İthalat Subject
içine MessageService
. Bir konu da ekleyin. Son kod şöyle görünecektir:
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
}
}
Şimdi, bu hizmeti enjekte edin home.component.ts
ve bir örneğini yapıcıya iletin . Bunu app.component.ts
da yapın. Değerini #message
hizmet işlevine iletmek için bu hizmet örneğini kullanın 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);
}
}
İçeride app.component.ts
abone olun ve abonelikten çıkın (bellek sızıntılarını önlemek için) 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();
}
}
Bu kadar.
Şimdi, herhangi bir değer içeriye girdi #message
ait home.component.html
yazdırılabilir edilecektir {{message}}
içapp.component.html