#javascript #angular #typescript #observable
#javascript #angular #typescript #наблюдаемый
Вопрос:
Я экспериментирую с Angular 2 и его новыми реактивными концепциями.
Допустим, прямо сейчас у меня есть книжный магазин, который содержит список всех книг в магазине (извлеченный из внешнего API / источника). В этом хранилище вы найдете пару полок, которые, соответственно, содержат подмножество доступных книг.
Итак, используя классы, вы получите что-то вроде этого:
export class BookStore {
public books: Book[]
}
export class Shelf {
public shelfId: string
public store: BookStore
public shelfBooks: /* ????, Observable? */
/* here I'd like to have something declarative that allows me to filter the books that have their shelfId == a shelf's ID. */
constructor() {
this.shelfBooks = /* ... (self.store.books) */
.filter( book => book.shelfId == this.shelfId )
/* Have this dynamically updating the property if the parent's book list changes - how? */
}
}
В шаблоне я хотел бы использовать директиву ngFor для отражения списка книг в каждом представлении полки.
Каков «официальный» подход к этому?
Я читал о наблюдаемых, но они, похоже, в основном используются для Http и других вещей. В Angular 2 уже есть очень хорошая система обнаружения изменений, но я не уверен, какой подход здесь использовать.
Комментарии:
1. Да, учитывая, что
self.store.books
это наблюдаемое, которое получает новые значения,this.shelfBooks
наблюдаемое будет динамически обновляться. У вас есть проблемы с этим подходом? Можете ли вы реплицировать его как plunk, если вы это сделаете?2. Я думаю, что у меня здесь есть какой-то блокиратор мозга. Я бы хотел, чтобы shelfBooks автоматически обновлялся всякий раз, когда книги в книжном магазине меняются или обновляются. К сожалению, я понятия не имею, что искать в Google или где найти рабочие примеры. Документация по этому вопросу тоже довольно скудная.
3. Я думаю, вы можете начать с заполнения пробелов в опубликованном вами коде. Что такое
self.store.books
? Является ли оно наблюдаемым? Где оно назначается? КакShelf
используется?