javascript - Angular Universal,在单击 'refresh' 两次之前应用程序不会加载

标签 javascript angular angularfire2

我正在构建一个 Angular 通用应用程序。我最近添加了一个路由解析器并开始看到这种奇怪的行为,当我运行 npm run dev:ssr 时,页面不会加载,直到我点击重新加载按钮两次。

第一次:点击:浏览器旋转并且似乎没有超时...

第二次点击:页面加载

这是我的 github repo .我怀疑它与我的路由解析器有关,它只是从 Firestore 获取数据并将其放在 TransferState 中。 为方便起见,这里是解析器:

import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
import { Observable, of } from 'rxjs';
import { isPlatformServer } from '@angular/common';
import { makeStateKey, TransferState } from "@angular/platform-browser";
import { Restaurant } from '../restaurants/Interfaces.model';
import { AngularFirestore } from '@angular/fire/firestore';
import { first, tap } from 'rxjs/operators';


@Injectable()
export class RestaurantResolver implements Resolve<Restaurant> {

    constructor(
        public afs: AngularFirestore,
        private transferState: TransferState,
        @Inject(PLATFORM_ID) private platformId) {

    }

    async resolve(route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Promise<Restaurant> {

        console.log('platformId', this.platformId)

        const rId = route.url[1].path;

        const restaurantId = makeStateKey<Restaurant>("restaurant-" + rId);

        if (this.transferState.hasKey(restaurantId)) {

            console.log('has key', restaurantId)


            const restaurant = this.transferState.get(restaurantId, null);

            this.transferState.remove(restaurantId);

            return restaurant;
        }
        else {

            let result: Restaurant = (await this.afs.doc('restaurants/' + rId).get().toPromise()).data() as Restaurant
            if (isPlatformServer(this.platformId)) {
                this.transferState.set(restaurantId, result);
            }
            return result;
        }
    }
}

最佳答案

事实证明,AngularFire 库中存在一个 bug,其中 observables 没有完成,这是给定的行为。

关于javascript - Angular Universal,在单击 'refresh' 两次之前应用程序不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65430975/

相关文章:

javascript - 如何在 jQuery 中组契约(Contract)一个表上的两个不同的 onClick 事件?

javascript - 我如何从谷歌地图信息窗口调用 Angular2 函数?

class - typescript 类 : "Overload signature is not compatible with function implementation"

javascript - firebase firestore 以 Angular 读取特定文档

json - 使用 Angularfire2 按键排除项目

javascript - Vuex with Jest - 无法读取未定义的属性 <getterName>

javascript - 希望使用 Javascript 实现带有链接的网页自动化

javascript - 使用 find 触发具有自己 id 的类

angular - 如何从子路由导航到父路由?

angular - 如何使用angularfire2检查 child 是否存在于firebase列表中