angular - 加载和接收服务器响应后刷新元素
问题描述
此元素应在服务器响应后更新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
beforecalledWhenPageLoaded
方法。我会删除它。
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);
});
}
);
}
推荐阅读
- powershell - PowerShell 工作流调用命令不起作用(写入主机)
- selenium-webdriver - 单击页面上的元素但未滚动到 nightwatch.js 中的视图时,如何防止错误?
- java - 无法从休眠中的 Crud 操作中检索数据
- python - sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) 没有这样的表:用户
- javascript - 在 node.js 中重命名 json 对象名称
- python - 如何在创建块时将 2D numpy 数组块附加到二进制文件?
- laravel - 如何在 Windows 服务器上部署将通过 LAN 访问的 laravel 应用程序?
- angular - 错误:“存储”类型上不存在属性“令牌”
- three.js - 如何防止在鼠标、触摸或按键事件之外的 iTowns 地球旋转上进行剔除或简单地重绘?
- android - 在 ViewModel 中使用 LiveData 将对象传递给其他活动