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.