2017-07-10 8 views
0

私のAngular 4アプリケーション内で広く使用されている2つのライブラリ:ng-bootstrapng-bootstrap)とHighchartsHighcharts)の間には、奇妙なやりとりがあります。ように、data-selectionmetering-chart角度のあるサードパーティのライブラリのやりとり

は、私は2つの子コンポーネントを含むこのmeteringコンポーネントを持っているdata-selectionには、以下が含まれ

<div> 
    <data-selection (selectedEntities)="onSelectedData()"></data-selection> 
    <button (click)="loadMeteringData()">Load Data</button> 
    <metering-chart *ngIf="chartData" [chartData]="chartData"></metering-chart> 
</div> 

から剥奪 - テンプレート:

[...] 
<form class="form-inline"> 
    <div class="form-group"> 
     [...] 
     <div class="input-group"> 
      <input class="form-control" 
        placeholder="yyyy-mm-dd" 
        name="dpStart" 
        [(ngModel)]="startDateModel" 
        ngbDatepicker 
        #startDate="ngbDatepicker"> 
      <div class="input-group-addon" 
       (click)="startDate.toggle()"> 
       <i class="fa fa-calendar"></i> 
      </div> 
      [...] 
     </div> 
    </div> 
</form> 
[...] 

metering-chartコンポーネントに含まれるもの:

<chart [options]="options" 
    (load)="createChartObject($event.context)" 
    (drilldown)="drilledDown($event)" 
    (drillup)="drilledUp($event)" style="width:100%; display: inline-block; "></chart> 

metering成分はRoutingModuleによってインポート順にあるRoutes ファイルで宣言さrouter-outletあります。この RoutingModule輸入SharedModule(両方の子コンポーネント: data-selectionmetering-chartが宣言され、輸出されている)、そして はメインAppModuleによってインポートされます。

最初meteringchartDataが不定であるため、metering-chart成分は表示されません。この間、デートピッカーは魅力的に機能します。

しかし、チャートのデータとチャート自体をロードするためにボタンをクリックしても、日付ピッカーのポップアップコンテナが応答しなくなることがあります。

私は問題が再現されたplunkerを作成しようとしましたが、無駄に...しかし、ここで何が起こっているかを示すGIFだ

Weird library interaction

モデル、あなたが見ることができるように日付が入力フィールドに直接入力されると、更新中です。しかし、いずれかの日付をクリックすると、何の結果も得られません。

私が使用しています次:私は重要な何かがあるべきならば、ということをそんなにアーキテクチャまたはコンポーネントの相互作用に関するトンより多くの情報を提供しますが、ありますができ

Angular v. 4.0.1 angular2-highcharts v. 0.5.5 ng-bootstrap v. 1.0.0-alpha.27

私の質問から抜けて、私に教えてください。私はそれをすべて提供します。問題は、ライブラリ間の相互作用の不良ではなく、むしろchart要素の誤った作成に存在しない

+0

ここでは、plunkや他のhttp://stackoverflow.com/help/mcveを使わないで解決策を提案することはほとんどありません。問題を再現できない場合、回答者はどのようにこれを行うことができますか? – estus

+0

私は難しさを認識しています。私はこのような相互作用が、より明るく広範な心にいくつかのアイデアを喚起することを期待していました...私の質問のあいまいさを完全によく理解しているので、私はこの問題をプランナーに再現しようとしました。にもかかわらず、誰かがこの問題についていくつかの光を当てることを望んだ...結局のところ、Plunkerはいつも周りにいなかった... –

+1

Plunkerは周りにはなかったが、SOルールではMCVEが必要であり、問題をデバッグする時間を惜しまない人がいるということです。 AngularやJSの理論上の質問やHighcharts/Bootstrap /動いている部分が多すぎるので、これは控除だけで解決することはできません。 – estus

答えて

2

はNG-ブートストラップのGitHubの発行ページにリンクAlios'答えから撮影します。明らかに、Angular Zone内で作成されていたため、すべてのイベントハンドラの変更検出がトリガされていました。のチャート作成、データの更新、およびドリルダウン/アップイベントを

<div id="chart-container"></div> 

そして去る:

ソリューションはそうのようにそれを残して、metering-chartコンポーネントテンプレートからチャート作成&更新イベントのバインディングを削除しました角度ゾーンの外側に取り扱うこと:

さらに
this.zone.runOutsideAngular(() => { 
    // Create or Update the chart 
}) 

、前<chart>要素で定義されたすべてのイベント・バインディングは、コンポーネントのロジックの内部に再定義されなければならないとオプションオブジェクト。

関連する問題