EventEmitter在角服务,好不好?(EventEmitter in angular serv

2019-10-28 20:34发布

我用EventEmitter@Output在coleagues中提及了这不是一个好的做法角服务,莫衷一是。

我发现这个职位提到这是一个不好的做法,似乎大多是个人意见,与本答案是提它的确定使用它。 我找不到任何正式文件关于它的,所以如果有人知道它的官方答案,请张贴。

关于官方文档EventEmittter

Answer 1:

我用EventEmitter和@Output在coleagues中提及了这不是一个好的做法角服务,莫衷一是。

注释@Output()在服务没有影响。 它用来告诉角模板编译器的结合Observable到的模板表达。

如果我看到@Output()的服务,那么我会告诉开发商将其删除。

EventEmitterObservable ,并且没有副作用在服务中使用它,但也有没有任何好处。

你可以使用任何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
}

组件需要有自己的属性, 市民如果他们是在模板中使用,但是这不是对服务的情况。



文章来源: EventEmitter in angular services, good or bad?