• Есть ли способ узнать, что с роута angular ушли?

    @Lan_ser
    попробуй Location
    Ответ написан
    Комментировать
  • Как изменить массив в BehaviourSubject?

    @Lan_ser
    В сервисе
    private postSource: BehaviorSubject= new BehaviorSubject(Posts)
    newPost = this.postSource.asObservable(); - метод вернет объект с методами подписки на событие.
    создаем метод
    emitNewPost(el: number) {
    // добавь логику добавления элемента в массив
    this.postSource.next(post ) - уведомит все подписанные компоненты
    }

    в первой компоненте
    add(){
    this.server.emitNewPost(post) - вызываем emitNewTask, передаем даные
    }

    во второй
    this.service.pubs.subscribe(p => this.posts = p);
    Ответ написан
    Комментировать
  • Как на Angular + RxJs использовать Web Worker?

    @Lan_ser
    Не претендую на самый правильный подход.
    Как это получилось у меня
    В сервисе в нужном методе подключаешь web-worker
    posts: string = 'https://jsonplaceholder.typicode.com/posts';
      submit() {
        if (typeof Worker !== 'undefined') {
          let input$: Observable<string> = of(this.posts);
          
         fromWorker<string, string>(
            () => new Worker(new URL(`./demo.worker`, import.meta.url)),
            input$
          ).subscribe((post) => {
            console.log(`Got from worker`, post);
          });
        } else {
          console.log('smth wrong');
          
        }
      }


    Web-worker
    import { DoWork, runWorker } from 'observable-webworker';
    import { Observable } from 'rxjs';
    import { delay, switchMap } from 'rxjs/operators';
    import { ajax } from 'rxjs/ajax';
    
    export class HelloWorker implements DoWork<any, any> {
      public work(input$: Observable<any>): Observable<any> {
        return this.getPosts(input$)
      }
    
      getPosts(input$: Observable<any>){
        return input$.pipe(
          delay(1000),
          switchMap((i) => ajax.getJSON(i))
        );
      }
    
    
    }
    
    runWorker(HelloWorker);


    Для каждой задачи я создаю новый web-worker. Но мне кажется есть возможность этого избежать.
    Надеюсь это поможет
    Ответ написан
    Комментировать