いくつかのアプリケーションをAngular 2から4に移行して以来、迷惑な動作に気付きました。ユーザーアクションを介して行われたすべてのHTTP要求は、ブラウザを更新します。次のコードは、エラーを再現します。HTTPリクエストではAngular 4に移行した後にブラウザがリフレッシュされます
サービス:
@Injectable()
export class ProductService() {
constructor(private _http: Http) { }
toggleFav(product: Product): Observable<Product> {
let data = { "fav": !product.fav };
this._http
.patch(`api/products/${product.id}`, data)
.map((r: Response) => r.json() as Product);
}
}
コンポーネント:
@Component({...})
export class ProductComponent {
product: Product;
constructor(private _productService: ProductService) { }
fav(): void {
this._productService
.toggleFav(product)
.subscribe((updatedProduct: Product) => {
this.product = updatedProduct;
});
}
}
テンプレート:予想通りの角2では
<div>
...
<button type="button" (click)="fav()">
<i [ngClass]="{ 'fav-on': product.fav, 'fav-off': !product.fav }"></i>
</button>
</div>
、このコードが実行されます。HTTPクライアントがサーバに要求しますObservableが更新されたデータを通知すると、それがテンプレートにバインドされ、Change Detectが強制的に実行されますイオンが発生する。しかしAngular 4上で同じコードを実行すると、ブラウザはアプリ全体をリフレッシュします。
この動作の責任者は誰かわかりません。たぶん、HTTPクライアント、おそらくライブラリZone.js、多分私、など誰かがこの行動も持っているのですか?それを解決する方法はありますか?
ありがとうございました。
あなたは 'angular-cli'を使用していますか、ローカルWebサーバに接続していますか? – PierreDuc
はい、どちらもそうです。 Angular CLIのバージョンは1.0.3で、APIとして使用しているサーバーはローカルの[JSON Server](https://github.com/typicode/json-server)です。問題に関わっている人は誰でもコメントできますか? – vermicida