Подписка не работает angular2

1

У меня есть программа angular2, в которой я хочу обновлять данные компонента, когда клик сделан на другом компоненте. я сделал службу, в которой у меня есть два метода: один для обновления данных и другой для получения данных.

моя служба выглядит следующим образом

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';


@Injectable()
export class DataserviceService {

    public subject = new Subject<any>();

    sendMessage(message: any) {
      debugger;
        this.subject.next({ text: message });
    }

    clearMessage() {
        this.subject.next();
    }

    getMessage(): Observable<any> {
        return this.subject;
    }
}

в моем компоненте a где щелчок производится. У меня есть эта функция для обновления данных.

onClick()
    {
       this._dataserviceService.sendMessage(this.getJsonData());
    }

и в компоненте b я подписал его таким образом.

 ngOnInit() {
debugger;
     this.subscription = this._dataserviceService.getMessage().subscribe(message => { this.message = message;
     console.log(this.message)
     debugger;
    });
  }

если я выполняю подписку в том же компоненте, он отлично работает, но в другом компоненте он не обновляет данные. Любая помощь будет оценена по достоинству.

править На моем понимании главный вопрос в том, что мой абонентский компонент загружается после службы инициализации.

Теги:
angular2-services

1 ответ

1

Попробуйте заменить функцию getMessage() следующим образом:

getMessage(): Observable<any> {
    return this.subject.asObservable();
}

Кажется, что на данный момент ваш getMessage() не возвращает наблюдаемый объект, что объясняет, почему метод подписки неэффективен.

  • 0
    Я уже попробовал это. Также предметный класс является дочерним классом наблюдаемого класса, и не имеет значения, анализирую я его или нет.
  • 0
    У меня точно такой же код (разные имена переменных, но) в угловом приложении, над которым я сейчас работаю, и кажется, что оно работает как положено ... извиняюсь, если вы уже сделали это, но проверили ли вы, что ваш сервис правильно настроен в вашем файле app.js (т.е. импортирован и добавлен в массив провайдеров), а также импортирован в компонент b?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню