2016-02-22 2 views
6

Я довольно новичок в наблюдениях. Как создать Observable только из простой строки? Затем подпишитесь на него и выведите его, когда он изменится.Наблюдаемый из строки (Угловой 2)

Это имеет смысл?

Мне не повезло с поиском google. Возможно, неправильные ключевые слова?


Добавление код для лучшего объяснения:

My constructor on service 

constructor() { 
    // Create observable stream to output our data 
    this.notice = Observable.create(
    (observer) => this.observer = observer; 
); 
}; 

My method on service 

set(string) { 
    this.notice.subscribe((value) => { 
    // Push the new value into the observable stream 
    this.observer.next(string); 
    }, (error) => console.log('Could not set data.')); 
} 

Calling service method 

setNotice(event) { 
    event.preventDefault(); 

    // Calling service to set notice 
    this.noticeService.set('This is a string'); 
} 

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

+0

Waht об этом.notice.unsubscribe() в ngDestroy() тоже? Я знаю, что это распространенная причина утечек памяти для добавленных прослушивателей событий вручную ... Поэтому я предполагаю, что это будет одно и то же. – JGFMK

+0

Я бы тоже рассматривал BehaviorSubject для этого. https://stackoverflow.com/questions/39494058/behaviorsubject-vs-observable – JGFMK

ответ

12

Вы можете использовать of метод Observable класса:

var obs = Observable.of('some string'); 

Редактировать

Что касается кода вашей службы, я woulsd реорганизовать код вашего метода set как это:

set(string) { 
    this.observer.next(string); 
} 

Вы можете подписаться на notice в другой части вашего заявления, чтобы получить уведомление.

+0

Благодарим вас за это. Мне интересно, как сделать «некоторую строку» как значение переменной, которое может измениться. Как это сделать? –

+0

На самом деле вы не можете. При этом вы можете активировать событие при изменении значения. Для этого вам нужно создать необработанное наблюдаемое: 'Observable.create ((observer) => {observer.next ('some string');});'. Метод 'next' можно вызвать несколько раз ... Обратите внимание, что вы можете установить переменную' observer' в переменную вне обратного вызова. –

+0

Еще раз спасибо. Я добавил код выше. –

Смежные вопросы