angular 2 中的 behaviorSubject,它是如何工作的以及如何使用它
behaviourSubject in angular2 , how it works and how to use it
我正在尝试构建一个共享服务,如下所示
import {Injectable,EventEmitter} from 'angular2/core';
import {Subject} from 'rxjs/Subject';
import {BehaviorSubject} from 'rxjs/subject/BehaviorSubject';
@Injectable()
export class SearchService {
public country = new Subject<SharedService>();
public space: Subject<SharedService> = new BehaviorSubject<SharedService>(null);
searchTextStream$ = this.country.asObservable();
broadcastTextChange(text: SharedService) {
this.space.next(text);
this.country.next(text);
}
}
export class SharedService {
country: string;
state: string;
city: string;
street: string;
}
我不知道如何实现 BehaviourSubject,基本上我在这里尝试的只是一团糟,我想我在子组件中使用
调用这个值
console.log('behiob' + shared.space.single());
抛出错误,因为 .single()/last() 等任何可用的都不是函数所以有人可以告诉我它是如何工作的以及如何在我搜索示例时实现它但是 none 对我来说很有意义。
缩减为一个属性应该是这样的。我将 SharedService
更改为 string
因为对我来说使用名为 XxxService
的类型作为事件值没有意义:
import {Injectable} from 'angular2/core';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
@Injectable()
export class SearchService {
public space: Subject<string> = new BehaviorSubject<string>(null);
broadcastTextChange(text:string) {
this.space.next(text);
}
}
@Component({
selector: 'some-component'
providers: [SearchService], // only add it to one common parent if you want a shared instance
template: `some-component`)}
export class SomeComponent {
constructor(searchService: SearchService) {
searchService.space.subscribe((val) => {
console.log(val);
});
}
}
我正在尝试构建一个共享服务,如下所示
import {Injectable,EventEmitter} from 'angular2/core';
import {Subject} from 'rxjs/Subject';
import {BehaviorSubject} from 'rxjs/subject/BehaviorSubject';
@Injectable()
export class SearchService {
public country = new Subject<SharedService>();
public space: Subject<SharedService> = new BehaviorSubject<SharedService>(null);
searchTextStream$ = this.country.asObservable();
broadcastTextChange(text: SharedService) {
this.space.next(text);
this.country.next(text);
}
}
export class SharedService {
country: string;
state: string;
city: string;
street: string;
}
我不知道如何实现 BehaviourSubject,基本上我在这里尝试的只是一团糟,我想我在子组件中使用
调用这个值console.log('behiob' + shared.space.single());
抛出错误,因为 .single()/last() 等任何可用的都不是函数所以有人可以告诉我它是如何工作的以及如何在我搜索示例时实现它但是 none 对我来说很有意义。
缩减为一个属性应该是这样的。我将 SharedService
更改为 string
因为对我来说使用名为 XxxService
的类型作为事件值没有意义:
import {Injectable} from 'angular2/core';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
@Injectable()
export class SearchService {
public space: Subject<string> = new BehaviorSubject<string>(null);
broadcastTextChange(text:string) {
this.space.next(text);
}
}
@Component({
selector: 'some-component'
providers: [SearchService], // only add it to one common parent if you want a shared instance
template: `some-component`)}
export class SomeComponent {
constructor(searchService: SearchService) {
searchService.space.subscribe((val) => {
console.log(val);
});
}
}