小编m41*_*41n的帖子

更改检测未注册数据更改

我有一个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();)从添加和删除功能手动触发更改检测.虽然这也没有消除手动刷新页面以查看更改的需要.

现在我发现变量检测缺少什么呢?或者,我如何在添加/删除方法中手动触发它?

angular-http angular

7
推荐指数
2
解决办法
1万
查看次数

http.get - 如何正确捕获 404

我正在构建一个日历应用程序,它从(当前模拟的)后端获取每天的数据。在 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)

error-handling http http-status-code-404 angular

4
推荐指数
1
解决办法
2600
查看次数