Queria detalhes dessa linha this.alertSubject.next(new Alert(alertType, message);)
. Queria uma explicação detalhada do que é feito.
Queria detalhes dessa linha this.alertSubject.next(new Alert(alertType, message);)
. Queria uma explicação detalhada do que é feito.
Fala ai Mauricio, tudo bem? A função .next
irá disparar seus listeners com um novo valor.
Basicamente ela funciona como um emissor de evento, ou seja, nossos componentes realizam o subscribe
para passar a receber eventos e quando a gente faz o .next
eles são notificados.
Espero ter ajudado.
Não entendi. Poderia exemplificar, por favor?
Fala Mauricio, a ideia seria mais ou menos essa:
Primeiro você tem os subscribers
:
// algum-arquivo-1.js
algumObservable().subscribe()
// algum-arquivo-3.js
algumObservable().subscribe()
// algum-arquivo-2.js
algumObservable().subscribe()
Imagine que são três arquivos diferentes (poderia ser três componentes), dessa forma, nosso Observable
em seu array
de listener possui três funções de callback para notificar.
Se a gente fazer:
algumObservable.next(1)
Ele vai notificar os três listeners, ou seja, os três arquivos que fizeram subscribe
e como parâmetro irão receber o número 1
.
Podemos fazer de novo:
algumObservable.next({ nome: 'Matheus' })
O processo iria ser o mesmo, os três serão notificados e receberam o objeto com a propriedade nome
.
Por baixo dos panos, basicamente quando a gente chama o subscribe
essa nova função é inserida em um array
, algo assim:
const subscribe = (callback) => {
listeners.push(callback)
}
Dessa forma a gente registrou todas as funções que precisamos chamar e quando chamamos o next
, podemos percorrer esse array
e chamá-las:
const next = (data) => {
listeners.forEach(callback => callback(data))
}
Lembrando que é algo bem simples e com certeza a RxJS é mais avançada e complexa, mas, a ideia é mais ou menos essa e tem de ser parecida.
Espero ter ajudado.
Ok, acho que entendi. Mais uma coisa. Sobre o alertSubject: Subject<Alert> = new Subject<Alert>();
queria recordar o que é um Subject e porque ele precisou ser inicializado (new Subject<Alert>()
).
Fala Mauricio, o Subject
é um tipo especial de Observable
que normalmente é utilizado para notificar vários observadores.
Seria a ideia de broadcast, ele envia e notifica vários lugares.
Espero ter ajudado.