2017-05-23 2 views
1

いくつかのアプリケーションを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、多分私、など誰かがこの行動も持っているのですか?それを解決する方法はありますか?

ありがとうございました。

+0

あなたは 'angular-cli'を使用していますか、ローカルWebサーバに接続していますか? – PierreDuc

+0

はい、どちらもそうです。 Angular CLIのバージョンは1.0.3で、APIとして使用しているサーバーはローカルの[JSON Server](https://github.com/typicode/json-server)です。問題に関わっている人は誰でもコメントできますか? – vermicida

答えて

2

angular-cliにはライブリロードがあるため、ファイルに変更があった場合(必ずしもプロジェクトファイルである必要はありません)、リロードがトリガーされます。私が推測するのは、PATCHリクエストを実行すると、これはangular-cliのファイルを変更するか、angle-cliからのリロードをトリガーするJSONサーバーにログインしていることです。

ng serve -lr=false 

もちろんこれは、自分自身のために話すが、聞かせて:

可能な解決策は、別の場所にJSONサーバのファイルを移動、または-lrオプションを使用してCLIのライブリロードをオフにすることができ私はちょうどそれをそこに置いた。 ng serveでこれらのアプリを導入していますか?それとも、開発中に問題が発生しただけですか?デプロイメントのためにng build {options}コマンドを使用する必要があります

+0

あなたのアプローチはまったく正しいです。 JSONサーバーで公開されているAPIに対応する 'db.json'ファイルは監視ディレクトリの内側にあり、このファイルのどのエディションでもブラウザがリロードされていました。 T.T 角2アプリは手で開発されたもので、ツールは使用されていません。 Angular 4に移行するにあたっては、CLIを使用して足場の作業を簡単にすることにしましたが、問題の起点であるとは思っていませんでした。 本当にありがとうございます。 – vermicida

+0

あなたは私の一日を保存しました。これはとても明白ですが、デバッグ時には私はそれを考えませんでした... – brense

関連する問題