此元素应在服务器响应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
。 Angular
的新手。发现类似的内容https://stackoverflow.com/a/58652468仍然对我不起作用。帮助非常感谢
----更新 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.-我不知道为什么get
方法之前有calledWhenPageLoaded
。我将其删除。
2.-这是重要的一个:您已经在组件中将IAmThatElement
声明为布尔值,但是在模板中将其绑定时,您正在使用async
管道,这意味着您正在订阅可观察对象,这是不对。因此,您有两个选择:
| 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);
});
}
);
}