我用EventEmitter
和@Output
在coleagues中提及了这不是一个好的做法角服务,莫衷一是。
我发现这个职位提到这是一个不好的做法,似乎大多是个人意见,与本答案是提它的确定使用它。 我找不到任何正式文件关于它的,所以如果有人知道它的官方答案,请张贴。
关于官方文档EventEmittter
我用EventEmitter
和@Output
在coleagues中提及了这不是一个好的做法角服务,莫衷一是。
我发现这个职位提到这是一个不好的做法,似乎大多是个人意见,与本答案是提它的确定使用它。 我找不到任何正式文件关于它的,所以如果有人知道它的官方答案,请张贴。
关于官方文档EventEmittter
我用EventEmitter和@Output在coleagues中提及了这不是一个好的做法角服务,莫衷一是。
注释@Output()
在服务没有影响。 它用来告诉角模板编译器的结合Observable
到的模板表达。
如果我看到@Output()
的服务,那么我会告诉开发商将其删除。
EventEmitter
是Observable
,并且没有副作用在服务中使用它,但也有没有任何好处。
你可以使用任何Observable
在任何一个组件或服务类型的发射器。 有两个原因,我们有EventEmitter
。 1)它日期提前角队的决定,承诺使用观测,他们认为他们可能需要自己的实现,2),它可以发出在接下来的JavaScript周期(可选设置)值。
有边缘案件发出下一个周期的变化,以避免与变化检测问题所需的人。
@Injectable()
export class MyService {
public events: Subject<any> = new Subject();
}
上述服务的问题是,任何人都可以从公众发出值events
。 您希望您的服务是手柄发光值的唯一代码。
@Injectable()
export class MyService {
private _events: Subject<any> = new Subject();
public get events(): Observable<any> {
return this._event;
}
}
以上是更好,因为访问Subject.next(..)
是私有的。 消费者只能订阅可观察的。
如果按照组件的方法。 它迫使你揭露你的发射器是不是一个好主意。
@Injectable()
export class MyService {
@Output() // <<< has no effect
public events: EventEmitter<any> = new EventEmitter();
// ^^ makes the emitter public
}
组件需要有自己的属性, 市民如果他们是在模板中使用,但是这不是对服务的情况。