路由器解析器不渲染组件

2024-04-30

我有这个路由器解析器来从 Google Firestore 检索数据。我正在尝试使用解析器来提前获取数据。当我将调试器放置在解析函数中时,它会显示从服务器检索的数据。但它永远不会从resolve()方法返回。谁能帮我一下。

路由模块

const routes: Routes = [
    { path: '', component: HomeComponent},
    { path: 'projects', component: ProjectsComponent, resolve: {projectData: ProjectResolver} },
    { path: 'about', component: AboutComponent}
];

应用模块

  providers: [
    ProjectService,
    ProjectResolver
  ],

解析器服务

import { Observable } from 'rxjs';
import { ActivatedRouteSnapshot, RouterStateSnapshot, Resolve } from '@angular/router';
import { Injectable } from '@angular/core';
import { ProjectService } from './project.service';
import { map } from "rxjs/operators";
import { Project } from './project.model';

@Injectable()
export class ProjectResolver implements Resolve<Project[]> {

    constructor(private projectService: ProjectService ) {

    }

    resolve(route: ActivatedRouteSnapshot, router: RouterStateSnapshot) : Observable<Project[]> | any{
        return this.projectService.getProjects().pipe(map(project => {
            return project //Debugger shows fetched data(Array of projects)
        }
        ));
    }
}

项目服务

import { AngularFirestore } from 'angularfire2/firestore';
import { Observable } from "rxjs";
import { Injectable } from "@angular/core";

@Injectable()
export class ProjectService {

    constructor(private db: AngularFirestore) {}

    getProjects(): Observable<any> {
        return this.db.collection('currentProjects').valueChanges();
    }

}

** 项目组件(该组件从未被解析器加载 )**

import { Component, OnInit, Injectable } from '@angular/core';
import { Project } from './project.model';
import { ActivatedRoute } from '@angular/router';
import { ProjectService } from './project.service';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-projects',
  templateUrl: './projects.component.html',
  styleUrls: ['./projects.component.css']
})

export class ProjectsComponent implements OnInit {

   projects: Project[] = [];

  constructor(private route: ActivatedRoute, private projectService: ProjectService) { 
  }

  ngOnInit() {
      this.route.data.subscribe((data: Project[]) => {
        this.projects = data['projectData'];
      })
  }

}

问题是 Angular Firebase Observable(事件流)永远不会像正常的“observable”一样完成,因此它永远不会解析。我使用“take”运算符修改了 Observable 以获取第一项并强制完成。

this.db.collection('currentProjects').valueChanges().take(1);

Changes:

  • 删除了项目服务
  • 修改后的ProjectResolver
  • 修改后的项目组件

我在下面发布了我的问题的解决方案:

项目解析器(工作中)

export class ProjectResolver implements Resolve<any> {

    constructor(private db: AngularFirestore) {

    }

    resolve(route: ActivatedRouteSnapshot, router: RouterStateSnapshot) : any{

        return Observable.from(this.db.collection('currentProjects').valueChanges()
            .do(data => {  
                return data
            }).take(1))
    }
}

项目组件(工作)

export class ProjectsComponent implements OnInit {

  private projects: Project[];

  constructor(private route: ActivatedRoute) {

  }

  ngOnInit() {
    this.route.data.subscribe((data) => {
      this.projects = data['projectData'];
    })
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

路由器解析器不渲染组件 的相关文章

随机推荐

  • OneDrive上传/下载到指定目录

    我正在尝试使用 Live SDK v5 6 在我的 Windows Phone 8 1 Silverlight 应用程序中包含 OneDrive 的备份 恢复 我可以读 写标准的 me skydrive 目录 但我在寻找上传 下载到指定目录
  • 垂直滑动手势不适用于 UITableView

    我有 UIViewController 并在故事板中添加了 UITableView 后来我向视图添加了向上滑动手势识别器 但什么也没发生 这是我的代码 import UIKit class ViewController UIViewCont
  • iTextSharp - 如何将 PDFPRow 添加到 PDFPTable?

    我想将 PDFPCells 数组添加到 PDFPRow 然后将 PDFPRow 添加到 PDFPTable 但我似乎无法在 PDFPTable 中找到为此的方法 然而有一个 PDFPTable AddCell 有任何想法吗 查看PdfPTa
  • 是否可以将密码以纯文本形式存储在 php 变量或 php 常量中?

    根据问题 在 php 页面上存储密码是否安全 例如 password pa w0rd 如果用户看不到它 那就安全了 对吗 编辑 确实有人建议使用hash 但是数据库服务器连接密码会有问题不是吗 简短的回答是否定的 而且要看情况 以纯文本形式
  • 如何从Java中的sqlite中的多个表中进行选择?

    我正在尝试学习如何在 java 程序中使用 sqlite 数据库 不是安卓 我去了this https bitbucket org xerial sqlite jdbc overview链接 下载 jdbc 库并复制示例 该示例运行正常 没
  • 有什么方法可以处理 HTTP/2 Goaway 在 HttpClient java 中收到的 IOException 吗?

    我在应用程序中进行 API 调用 在某个时候它会随机抛出java io IOException 149 222 1 1 553232 GOAWAY received 使用Java 11环境 无论如何要解决此异常而不是迁移到 Http 1 1
  • Facebook 错误代码列表

    我正在寻找当您尝试使用 Graph API 获取信息时 Facebook 可以返回的所有列表 有人可以帮忙吗 Facebook 返回 400 HTTP 错误和 JSON 内容 例如 error type OAuthException mes
  • 如何使用 PHP 返回 JQuery .ajax() 的正确成功/错误消息?

    我不断收到错误警报 MYSQL 部分没有任何问题 查询被执行 我可以在数据库中看到电子邮件地址 客户端
  • 理解 htonl() 和 ntohl()

    我正在尝试使用 unix 套接字来测试向本地主机发送一些 udp 数据包 据我了解 当设置 ip 地址和端口以发送数据包时 我会填写我的sockaddr in将值转换为网络字节顺序 我在 OSX 上 我很惊讶这个 printf ntohl
  • 添加类方法后如何更新类的实例?

    我发现自己陷入了困境 我开发了一个类 然后创建了该类的一个实例 这些类通常会执行数据和统计操作 这些操作需要很长时间 有时需要 20 分钟 我将继续开发我的类 并向其中添加其他方法 现在 如何使用新方法更新以前的类实例而不重新初始化该类的旧
  • Facebook API v3 -publish_to_groups 不工作

    我正在尝试更新我的应用程序以使用新的组权限 特别是publish to groups oauth 过程工作正常 但是当我发帖时我得到 200 需要publish actions权限 或者manage pages和publish pages作
  • 在最新的 Spring v4 中使用 @RequestBody 和可选主体

    使用时如何在 REST API 调用中使正文可选 RequestBodySpring中的注解 使用 Spring 的最新版本 如果您使用 RequestBody注释 它使客户端始终发送正文而不使其可选 I tried RequestBody
  • 如何在文件中固定数量的字符后插入换行符

    我正在寻找一个 bash 或 sed 脚本 最好是单行脚本 用它可以在巨大的文本文件中的固定数量的字符之后插入一个新行字符 像这样的事情怎么样 Change 20 是换行符之前的字符数 temp text 是要替换的文件 sed e s 2
  • 与 NA 匹配的值 - 缺失值 - 使用 mutate

    我有点卡住了 有没有比下面更好的方法来进行值匹配 将 NA 视为 实际值 mutate library dplyr data foo lt data frame A c 1 2 NA 4 NA B c 1 3 NA NA 4 不是所需的输出
  • 如何从 XBAP 关闭浏览器?

    我正在完全信任地使用 XBAP 应用程序 单击按钮时 我需要关闭托管 XBAP 的浏览器 我怎样才能实现这个目标 Application Currenty ShutDown 仅关闭应用程序 使浏览器保持空白 我知道这是一个非常老的问题 但如
  • 文件保存期间语法突出显示随机消失

    我正在使用 vim 编辑一些 python 文件 最近偶尔会出现在 vim 中保存缓冲区后语法高亮消失的情况 我尝试重置syntax on and set filetype python但无济于事 我根本不知道是什么原因导致了这个问题 所以
  • 如何从 WP_User 对象获取 WordPress 用户的名字?

    我正在写一个基本的插件 这是我的代码 new user get userdata user id user id is passed as a parameter first name1 new user gt user firstname
  • TextField“更改”事件仅在模糊时触发

    通常 Change 事件将在 TextField 失去焦点 模糊 后触发 但我需要它在字段值发生变化时立即触发 而不需要失去对该字段的关注 KeyListener 不会删除它 因为该值可能来自条形码扫描仪等 有什么办法可以做到这一点吗 提前
  • 更新到 Android SDK 工具 R22

    我也将 SDK 工具和 ADT 插件更新到了 R22 在更新之前一切都运行良好 但从那以后 我遇到了问题 基本上我有 2 个库项目和一个应用程序项目 我的一个库项目在 libs 文件夹中包含一些 jar 文件 这些 jar 之一在应用程序项
  • 路由器解析器不渲染组件

    我有这个路由器解析器来从 Google Firestore 检索数据 我正在尝试使用解析器来提前获取数据 当我将调试器放置在解析函数中时 它会显示从服务器检索的数据 但它永远不会从resolve 方法返回 谁能帮我一下 路由模块 const