Refre sh Элемент после загрузки и получения ответа сервера - PullRequest
0 голосов
/ 20 марта 2020

Этот элемент должен обновляться после ответа сервера div(*ngIf='IAmThatElement | async')

Компонент

public IAmThatElement: boolean = false;

constructor(private returnAliveService: ReturnAliveService) {}

ngOnInit() {
    this.calledWhenPageLoaded
}

//Not sure why there is a get. If the element is linked, should updating it not get reflected on view
get calledWhenPageLoaded() {
    this.returnAliveService.getServerHealth()
        .subscribe(data => {
            this.IAmThatElement = data.resut;
        }, error => {
            this.IAmThatElement = false;
        });

    return this.IAmThatElement;
}

Сервис

@Injectable()
export class ReturnAliveService {

    constructor(private http: HttpClient) {
    }

    getServerHealth() : Observable<Data> {
        return this.http.get<Data>('URL');
    }
}

Как обновить IAmThatElement. Newb ie до Angular. Нашел что-то похожее { ссылка } до сих пор у меня не работает. Помощь очень ценится

---- Обновлено с Observable. Не уверен, что это работает, и не знаю, как отобразить логическое значение в представлении после обновления

public IAmThatElement: Observable<boolean> = new Observable<boolean>();

constructor(private returnAliveService: ReturnAliveService) {}

ngOnInit() {
    this.returnAliveService.getServerHealth()
        .subscribe(
            data => {
                //No idea on how to populate IAmThatElement with data and display content on view
                this.IAmThatElement = Observable.create(true);
            }
        );
}

1 Ответ

1 голос
/ 20 марта 2020

В вашем коде нужно учитывать две вещи:

1.- Я не знаю, почему существует метод get до calledWhenPageLoaded. Я бы удалил его.

2.- Это важный: вы объявили IAmThatElement как логическое значение в своем компоненте, но при привязке его в шаблоне вы используете async pipe, который означает, что вы подписываетесь на наблюдаемое, и это не так. Таким образом, у вас есть два варианта:

  • удалить канал | async из шаблона.
  • объявить IAmThatElement наблюдаемым (например, BehaviourSubject) и изменить его значение в calledWhenPageLoaded метод.

Обратите внимание также, что возврат IAmThatElement в методе calledWhenPageLoaded не оказывает влияния.

Например:

import {BehaviorSubject} from 'rxjs';

public IAmThatElement: BehaviorSubject<boolean> = new BehaviorSubject(false);

constructor(private returnAliveService: ReturnAliveService) {}

ngOnInit() {
    this.returnAliveService.getServerHealth()
        .subscribe(
            data => {                 
            this.IAmThatElement.next(data.result); // I suppose `data.result` is a true value here
        }, error => {
            this.IAmThatElement.next(false);
        });
            }
        );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...