我有一个html结构,组件内部有一个组件(忘记了正确的单词).
基本上像这样工作(很大程度上简化):
主要的HTML:
<div *ngFor="let item of data">
<app-item [item]="item"></app-item>
</div>
<button (click)="addItem()">Add</button>
Run Code Online (Sandbox Code Playgroud)
item html:
<div>{{item.name}}</div>
<button (click)="deleteItem()">Delete</button>
Run Code Online (Sandbox Code Playgroud)
在app-item中我从列表中显示了几个项目.该列表通过http.get请求将数据直接从数据库中获取.
现在我还有添加或删除两个工作项的功能(项目分别添加到数据库或从数据库中删除项目就好了).虽然更改检测不会选择其中任何一个并且需要刷新站点(例如通过F5)来显示更改.
我检查了代码(并非所有代码都来自我)并且找不到任何指定的更改检测策略.
我还尝试通过ChangeDetectorRef(this.ref.detectChanges();)从添加和删除功能手动触发更改检测.虽然这也没有消除手动刷新页面以查看更改的需要.
现在我发现变量检测缺少什么呢?或者,我如何在添加/删除方法中手动触发它?
我正在构建一个日历应用程序,它从(当前模拟的)后端获取每天的数据。在 http.get 的正确 url 上,这可以正常工作,但如果 url 错误,或者请求的一天后端没有 data/json 对象(例如,周末没有任何数据),我(显然)得到 404,尽管控制台中的日志很少显示它,但它总是给我以下错误:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Run Code Online (Sandbox Code Playgroud)
显然它不能有预期的字符,因为请求的日期不存在 Json 对象。检查网络分析表明它确实是一个 404 错误。
我从这里使用基本的 http.get 和 handleError https://angular.io/guide/http#subscribe
带有 http.get 的服务代码:
getDayInfo(date: string): Observable<any> {
return this.gttp.get('somepath/' + date + '/somemoreinfo')
.map(this.extractData, // works just fine
console.log('map running for date: ', date)
)
.catch(this.handleError);
}
private extractData(res: Response) {
if (res != null) {
let body = res.json();;
return body;
} else { // else …Run Code Online (Sandbox Code Playgroud)