BehaviorSubject наблюдает несколько значений для Angular 2

Я пытаюсь использовать субъект поведения и наблюдать в Angular2, чтобы передать 3 параметра в одном массиве.

BehaviorSubject<Array<Something1>, Array<Something2>, Array<Something3>> 

Похоже, это не работает, потому что субъект поведения поддерживает только один параметр. Какие-либо предложения?


person Matt-pow    schedule 01.08.2017    source источник
comment
вы не передаете туда никаких параметров, вы просто указываете тип   -  person Max Koretskyi    schedule 01.08.2017
comment
есть ли что-нибудь непонятное в мом ответе?   -  person Max Koretskyi    schedule 03.08.2017


Ответы (2)


Вы можете передать массив массивов. Просто окружите его [];

BehaviorSubject<[Array<Something1>, Array<Something2>, Array<Something3>]>  
person Gili Yaniv    schedule 01.08.2017

Когда вы пишете так:

BehaviorSubject<Array<Something1>, Array<Something2>, Array<Something3>> 

Вы не передаете никаких параметров. Вы просто указываете, какие типы будет излучать этот субъект. Чтобы указать, что он может создавать элементы трех разных типов, используйте оператор |, который является тип объединения:

class T1 {}
class T2 {}
class T3 {}

const o = [new T1()];
const s = new BehaviorSubject<Array<T1> | Array<T2> | Array<T3>>(o);

Кроме того, BehaviorSubject принимает одно значение. Вот описание из документации:

Одним из вариантов Subjects является BehaviorSubject, который имеет понятие «текущее значение». Он хранит последнее значение, отправленное своим потребителям, и всякий раз, когда новый наблюдатель подписывается, он немедленно получает «текущее значение» от BehaviorSubject.

Поэтому, когда вы создаете экземпляр BehaviorSubject, вы должны передать это одно «текущее» значение. Вот почему ожидается только один параметр, потому что есть только одно «текущее» значение. И это значение может быть любого из типов, которые вы указываете между <...> при создании экземпляра субъекта.

person Max Koretskyi    schedule 01.08.2017