Использование Angular и PouchDB для PWA

Я взял Руководство по Angular Heroes и пытаюсь реализовать службу pouchdb для обслуживания данных. Я сделал резервную копию оригинального сервиса героев, который предоставил множество героев с разными атрибутами. Теперь я пытаюсь изменить службу для локального извлечения документов из pouchdb. Я изменил класс HeroService и настроил некоторые параметры в конструкторе.

import { Injectable, EventEmitter  } from '@angular/core';
import {Hero} from './hero';
import {HEROES} from './mock-heroes';
import { Observable, of } from 'rxjs';
import {MessageService} from './message.service';
import PouchDB from 'pouchdb';

@Injectable({
  providedIn: 'root'
})

export class HeroService {
  private isInstantiated: boolean;
  private database: any;
  private listener: EventEmitter<any> = new EventEmitter();


  constructor(private messageService:MessageService) { 
    if (!this.isInstantiated) {
      this.database = new PouchDB("http://server:5984/db1");
      this.isInstantiated = true;
  }
}



  getHeroes(): Observable<Hero[]> {
  console.info(this.database.allDocs({include_docs: true}))
    return of(this.database.allDocs({include_docs: true}));
    this.messageService.add("HeroService: fetched heroes");

    };

Console.log показывает «ZoneAwarePromise» в файле hero.service.ts в строке console.info, но содержит массив данных и документов, которые я хочу показать на экране. Правильно ли я подхожу к этому, используя службу для передачи данных из PouchDB в приложение Angular?

Компонент, в котором я пытаюсь показать эти данные, - это файл "dashboard.components.ts", а вот новая функция:

getHeroes(): void {
    console.info(this.heroes)
    console.info(this.heroService.getHeroes());
    this.heroService.getHeroes()
    .subscribe(heroes => this.heroes = heroes);
    //console.info(this)

  }

Есть ли лучший подход к этому?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
1 190
1

Ответы 1

Возможно, вы упускаете два самых крутых преимущества Pouch ... сначала офлайн и фоновый живые обновления.

Чтобы получить первое, вы должны создать две базы данных: одну удаленную, а другую - локально для браузера. Затем вы настраиваете репликацию между ними. После первого запуска, вообще без подключения к сети, ваша страница будет работать так же, как если бы она была подключена к сети. Запись и чтение в локальную БД будут мгновенными. При подключении к сети Pouch прозрачно синхронизирует все локальные и удаленные данные. эта статья может помочь вам начать с этого (хотя вы можете игнорировать материал о Phoenix; вы можете напрямую подключиться к CouchDB).

Если вы также используете живая находка, данные на экране обновятся в течение нескольких секунд, чтобы показать пользователю изменения на стороне сервера, без какого-либо дополнительного специального программирования с вашей стороны.

Наконец, я предлагаю вам оценить Couchbase (со шлюзом репликации) вместо CouchDB, он кажется восходящей звездой, в то время как CouchDB, похоже, теряет популярность.

Другие вопросы по теме