【发布时间】:2018-03-27 23:13:44
【问题描述】:
我得到了 upload.service 和 2 个带有一些组件的不同模块。
upload.service , upload.ts 导入到组件中->
上传.module (
upload.component(一切正常(我可以上传并获取照片) 来自数据库的url数据)
)
ui.module)
upload.component(相同的功能,但我看不到照片,没有网址)
)
工作组件(upload.component):
import { Component, OnInit } from '@angular/core';
import { UploadService } from '../shared/upload.service';
import { Upload } from '../shared/upload';
import { Observable } from 'rxjs/Observable';
@Component({
selector: 'uploads-list',
templateUrl: './uploads-list.component.html',
styleUrls: ['./uploads-list.component.scss'],
})
export class UploadsListComponent implements OnInit {
uploads: Observable<Upload[]>;
showSpinner = true;
constructor(private upSvc: UploadService) { }
ngOnInit() {
this.uploads = this.upSvc.getUploads();
this.uploads.subscribe(() => this.showSpinner = false);
}
}
组件不工作(ui.component 0 错误):
import {Component, OnInit} from '@angular/core';
import { UploadService } from "../../uploads/shared/upload.service";
import { Upload } from "../../uploads/shared/upload";
import { Observable } from "rxjs/Observable";
@Component({
selector: 'top-nav',
templateUrl: './top-nav.component.html',
styleUrls: ['./top-nav.component.scss'],
})
export class TopNavComponent implements OnInit {
uploads: Observable<Upload[]>;
show = false;
showSpinner = true;
toggleCollapse() {
this.show = !this.show;
}
constructor(private upSvc: UploadService) { }
ngOnInit() {
this.uploads = this.upSvc.getUploads();
console.log("paimama upload :", this.uploads)
this.uploads.subscribe(() => this.showSpinner = false);
}
}
我认为主要问题是我试图在两个不同的模块(组件)中使用来自一项服务的这些函数和变量。如何检索它以便它可以工作?
编辑(我正在调用的函数):
getUploads() {
this.uploads = this.db.list(`${this.auth.userId}`).snapshotChanges().map((actions) => {
return actions.map((a) => {
const data = a.payload.val();
const $key = a.payload.key;
return { $key, ...data };
});
});
return this.uploads;
}
Html(在upload.component中工作):
<h3>File Uploads</h3>
<div *ngFor="let upload of uploads | async">
<upload-detail [upload]='upload'></upload-detail>
<img src="{{upload.url}}" alt="">
</div>
<loading-spinner *ngIf="showSpinner"></loading-spinner>
<hr>
<upload-form></upload-form>
HTML(不工作的 ui.component)
<div *ngFor="let upload of uploads | async">
<img src="{{upload.url}}" alt="">
</div>
或
【问题讨论】:
-
你的
UploadService是什么类型的 observable?它可以多次发出值吗? -
已编辑:我从上传服务调用的函数。
-
您在每次调用时都创建了一个新的 observable。在您的服务中创建一个属性并将可观察对象设置为该属性,然后您可以在组件中使用该可观察对象,以便它们共享相同的流。
this.uploads的范围只在每个getUploads调用的内容中。 -
您能用我的代码示例解释一下吗?抱歉,还是没听懂。
-
我将在答案中展示示例。
标签: javascript angular firebase firebase-realtime-database