首页 文章

'{ query: {}; }'类型的参数不能分配给'QueryFn'类型的参数

提问于
浏览
2

我正在构建一个角度应用程序,我必须从firebase数据库上传和检索图像 . 我成功地能够上传图像,但是为了检索,我有以下一些代码

service.ts

getFileUploads(query = {}) {
this.fileUploads = this.db.list(this.basePath, {
  query: query
});
return this.fileUploads
}

我一直在收到错误

类型'{query:{}; ''不能赋值给'QueryFn'类型的参数 . 对象文字只能指定已知属性,'QueryFn'类型中不存在'query' .

以下是整个service.ts代码

import {Injectable} from '@angular/core';
import {AngularFireDatabase, AngularFireList} from 'angularfire2/database';
import * as firebase from 'firebase';

import {FileUpload} from '../profile/fileupload';

@Injectable()
export class UploadFileService {

  constructor(private db: AngularFireDatabase) {}

  private basePath = '/uploads';
  fileUploads: AngularFireList<FileUpload[]>;

  pushFileToStorage(fileUpload: FileUpload, progress: {percentage: number}) 
 {
const storageRef = firebase.storage().ref();
const uploadTask = storageRef.child(`${this.basePath}/${fileUpload.file.name}`).put(fileUpload.file);

uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED,
  (snapshot) => {
    // in progress
    const snap = snapshot as firebase.storage.UploadTaskSnapshot
    progress.percentage = Math.round((snap.bytesTransferred / snap.totalBytes) * 100)
  },
  (error) => {
    // fail
    console.log(error)
  },
  () => {
    // success
    fileUpload.url = uploadTask.snapshot.downloadURL
    fileUpload.name = fileUpload.file.name
    this.saveFileData(fileUpload)
  }
);
}

 private saveFileData(fileUpload: FileUpload) {
  this.db.list(`${this.basePath}/`).push(fileUpload);
}

 getFileUploads(query = {}) {
this.fileUploads = this.db.list(this.basePath, {
  query: query
});
return this.fileUploads;
}
}

以下是我要显示图像的组件的component.ts

import { Component, OnInit } from '@angular/core';
import { ItemService } from '../services/item.service';
import {FileUpload} from '../profile/fileupload';
import {UploadFileService} from '../services/upload-file.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database'; 

@Component({
  selector: 'app-admin',
  templateUrl: './admin.component.html',
  styleUrls: ['./admin.component.css']
})
export class AdminComponent implements OnInit {

  fileUploads: AngularFireList<FileUpload[]>;

  constructor(private uploadService: UploadFileService) { }

  ngOnInit() {
    this.fileUploads = this.uploadService.getFileUploads({l});
  }
}

1 回答

  • 1

    带有angularfire2的documentation for list querying表明 list() 方法的第二个参数应该是一个函数,而不是一个对象 .

    具体来说,herelist() 的方法定义表明它属于该类型

    list<T>(pathOrRef: PathReference, queryFn?: QueryFn): AngularFireList<T>
    

    并且 QueryFn (已定义here)属于该类型

    type QueryFn = (ref: DatabaseReference) => DatabaseQuery;
    

    所以错误是正确的,它期望你传递一个函数作为第二个参数而不是一个对象 .

    由于您自己的 query 参数没有您在此处发布的类型定义,因此我很难确切地说出您认为 getFileUploads 方法的调用者会传入的内容,但您可能需要在其间进行某种转换 . 对象类型和angularfire所期望的 QueryFn 类型 .

相关问题