gpt4 book ai didi

javascript - 连接扁平数据

转载 作者:可可西里 更新时间:2023-11-01 02:26:02 26 4
gpt4 key购买 nike

我想将 init 上的数据从我的客户表加入到项目列表中。

模型是这样的:

  • 项目

    • key
    • 名称:字符串
    • 客户:客户 key
  • 客户

    • key
    • 姓名:字符串

你有例子吗,我如何使用 angularfire2 从 angular2 组件做到这一点?

我的 Controller 看起来像这样:

import { Component, OnInit } from '@angular/core';
import { Project } from '../project';
import { Router } from '@angular/router';
import { FirebaseAuth } from 'angularfire2';
import { AngularFire, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2';
import { Observable } from 'rxjs';

@Component({
moduleId: module.id,
selector: 'app-projects',
templateUrl: 'projects.component.html',
styleUrls: ['projects.component.css']
})
export class ProjectsComponent implements OnInit {

projects: FirebaseListObservable<any[]>;
customers: FirebaseListObservable<any[]>;
projectName: string;
constructor(
private router: Router,
private af: AngularFire
) { };

ngOnInit() {
this.projects = this.af.database.list('projects');
}

add(projectName: string) {
this.af.database.list('projects')
.push({ name: projectName, id: '123' });
this.projectName = null;
}
}

更新

我已将 this.projects 的类型从 FirebaseListObservable 更改为 Observable我的 ngOnInit() 方法现在看起来像这样:

ngOnInit() {
this.projects = this.af.database.list(`projects`)
.map(projects => {
projects.map(project => {
this.af.database.object('customer/' + project.customer + '/name')
.subscribe(customer => {
project.customer = customer;
})
return project;
})
return projects;
});
}

我现在不能从模板中访问 c​​ustomer 的名称属性

<li *ngFor="let project of projects | async">

project.customer.$value

最佳答案

不太确定你的数据集是什么样子的,所以我只打算写一个基本的例子。假设这样的结构:

- projects
- key
- name: string
- customers
- customerKey: boolean

- customers
- key
- name: string

示例数据

- projects
- projectId1
- name: "Cool project!",
- customers
- customerId1: true,
- customerId2: true
- projectId2
- name: "Another cool project!",
- customers
- customerId2: true,
- customerId3: true

- customers
- customerId1
- name: "John Smith"
- customerId2
- name: "John Doe"
- customerId3
- name: "John John"

因此我们将客户的 key 存储在每个项目的 customers 属性中。

假设我们想要列出每个项目,但我们也想获得客户的真实姓名,而不仅仅是他们的 ID。由于 firebase 没有连接,我们必须手动执行此操作。这是一种方法:

this.projects = this.af.database.list(`projects`)
.map(projects => {
return projects.map(project => {
project.customers.map(customer => {
this.af.database.list(`customers`)
.subscribe(c => {
customer = c;
});
});
return project;
});
});

内部 .subscribe 可以更改为简单的 .map 如果你想异步获取数据(在这种情况下使用 async 模板中的管道`).

关于javascript - 连接扁平数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com