在类中定义的方法在其他类中调用时不会被识别为函数。
文件:模型/book.model.ts
export class Book {
constructor(public title: string, public author: string) {
}
isEqual (other: Book ): boolean {
return (this === other);
}
}
文件:服务/books.service.ts
import { Book } from '../models/book.model';
import { Subject } from 'rxjs/Subject';
import * as firebase from 'firebase';
import DataSnapshot = firebase.database.DataSnapshot;
export class BooksService {
books = [new Book ('', '')]
booksSubject = new Subject<Book[]>();
constructor() {
this.getBooks();
}
emitBooks() {
this.booksSubject.next(this.books);
}
getBooks() {
firebase.database().ref('/books')
.on('value',
(data: DataSnapshot) =>
{
this.books = data.val() ? data.val() : [];
this.emitBooks(); /
}
);
}
indexOfBook (book: Book) {
const bookIndex = this.books.findIndex(
(a_book) => {return book.isEqual (a_book)}
);
return bookIndex;
}
我想在 BooksService 类中调用 Book 类的“book.isEqual”方法。 book.isEqual 不被识别为函数,为什么?
最佳答案
Firebase 返回一些数据,但它只是一个对象:您需要使用 new Book()
从该数据创建一个Book
实例>.
firebase.database().ref('/books')
.on('value',
(data: DataSnapshot) =>
{
this.books = data.val() ? data.val().map(book => new Book(book[0], book[1])) : [];
this.emitBooks();
}
);
}
因为我不知道 Firebase 在 val()
中返回什么,这只是一个示例,假设数据包含一个 [author, title]
元组数组,但你明白了。也许它实际上是 new Book(book.author, book.title)
...
关于typescript - TypeError: book.isEqual 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56635722/