Queria detalhes dessa linha this.alertSubject.next(new Alert(alertType, message);). Queria uma explicação detalhada do que é feito.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.