J'ai créé une matrice de chaîne normale et a été déserté d'être observable à partir de celui-ci en utilisant "à partir de" si je pousse une valeur à la matrice d'origine avant de vous abonner, je reçois cette valeur dans Le flux de données. P> Toutefois, si je pousse un autre élément sur le tableau d'origine avant l'abonnement, rien ne se passe (il ne se comporte pas de manière réactive) P> strArr.push("coke")
fsa.subscribe(
x=>console.log(x) // outputs -> aaaa bbbb cccc coke
)
strArr.push("pepsi") // Still outputs -> aaaa bbbb cccc coke.
3 Réponses :
Avec un tableau, ce n'est pas si facile, mais au lieu d'un tableau, vous pouvez utiliser un sujet.
La question suivante: Avez-vous besoin de vous un tableau, ou est-ce bien d'utiliser un sujet à la place? P>
const stream$ = new ReplaySubject(); stream$.next('aaa'); stream$.next('bbb'); stream$.next('ccc'); stream$.subscribe(console.log); // [aaa bbb ccc] stream$.next('ddd'); stream$.subscribe(console.log); // [aaa bbb ccc ddd], and the first subscription gets just 'ddd'.
Ce que je voulais, c'était d'éviter de vous abonner après la valeur suivante. J'avais pensé à ceci: Constrar ferr = ['AAA', "BBB", "CCC"]; const fsa = de (tort); Strarr.Push ("Coke"); fsa.subscribe (x => console.log (x)); Strarr.Push ("Coke"); / * imprime jusqu'à "Coke" / fsa.subscribe (x => console.log (x)); Strarr.Push ("Pepsi"); fsa.subscribe (x => console.log (x)); / I> imprime tout * / mais le bloc de code est le même que le vôtre, je veux dire que je suis à nouveau abonné. Puissiez-vous me fournir la mise à jour? Merci beaucoup, mon pote.
Désolé pour le gâchis, je ne sais pas comment coller du code dans des commentaires afin qu'il soit lisible et en retrait. :(
Vous n'avez pas besoin de vous abonner la 2e fois. C'était un exemple. Une fois que .NEXT ('ddd') code> est appelé le premier abonnement obtiendra
ddd code>.
Une autre alternative consiste à combiner comportemortorsubject code> avec javascript
proxy code> pour surveiller tous les types de modifications de la matrice
J'ai trouvé une solution pour ce que j'essaie de faire. (Faites réagir l'observateur à de nouvelles changements dans la matrice après l'abonnement, j'espère que cela peut aider à ceux qui répondent à des questions similaires:
import { ReplaySubject } from 'rxjs'; const rSubject$ = new ReplaySubject(); const rSubjAsObs = rSubject$.asObservable(); // string const str = "I am afraid I can not do that, Dave"; //string no spaces let strNoSpace = str.replace(/\s+/g, ''); //word array let srtArr = str.split(' '); srtArr.forEach(word=>rSubject$.next(word)) rSubjAsObs.subscribe( data=>console.log(data) ) rSubject$.next("...said the good machine");
à partir de code> n'émet que des éléments dans les tableaux et n'émettra pas de manipulation d'objet de tableau
Je vois ... cependant, si j'écris à nouveau la pièce de code d'abonnement ci-dessous
strarr.push ("pepsi") code>, je vois le résultat souhaité imprimé ("AAA BBBB CCCC COKE PEPSI"). Et il y a encore une modification de tableau.
C'est parce que de fait toujours référence au même tableau, c'est pourquoi vous obtenez le résultat mis à jour. Tableau est stocké comme un pointeur sur un objet de tableau dans JS
Merci pour votre temps. Pourriez-vous me recommencer une autre ou une méthodologie, en utilisant RSJX afin que je puisse enquêter sur ce que j'essaye de faire? (Je viens d'apprendre que rxjs). Je ne veux pas que le travail soit fait pour moi, juste un indice ... merci, mon pote.
Je vais ajouter une réponse suggérer une autre approche