1
d3.jsの統合をテストするための簡単なIonicアプリケーションを作成しました。ここで見つけることができます: https://github.com/wberger/ionic2-d3js-testD3.jsとIonic 2:2番目のページビューのDOMにない要素
次のように私は統合をした:
- はメニューに
home.html
を追加サイド・ナビゲーションとアプリとシングルページ(home.html
) - を作成します。 index.htmlをで
- ロードd3.js:
<script src="https://d3js.org/d3.v4.min.js"></script>
home.html
- に
<div id="chart"></div>
を追加し、次のようにhome
テンプレート(source)に定義されてhome.ts
ngAfterViewInit()
でグラフを作成します。
<ion-header>
<ion-navbar>
<button menuToggle>
<ion-icon name="menu"></ion-icon>
</button>
<ion-title>
Ionic Blank
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
The world is your oyster.
<p>
If you get lost, the <a href="http://ionicframework.com/docs/v2">docs</a> will be your guide.
</p>
<div id="chart"></div>
<p>After</p>
</ion-content>
グラフcreat次のようにイオンは、(source)実装されている:
ngAfterViewInit() {
this.createChart();
}
createChart() {
var chart = d3.select("#chart").append("svg")
.attr("width", 100)
.attr("height", 100)
.append("g");
var rows = [
{x: 1, y: 1},
{x: 2, y: 2},
{x: 3, y: 3},
];
var xScale = d3.scaleLinear()
.range([0, 100])
.domain([1, 3]);
var yScale = d3.scaleLinear()
.range([100, 0])
.domain([1, 3]);
chart.selectAll(".dot")
.data(rows)
.enter().append("circle")
.attr("class", "dot")
.attr("cx", (row) => { return xScale(row.x) })
.attr("cy", (row) => { return yScale(row.y) })
.attr("r", 3.5);
}
アプリを起動すると、チャートが意図したとおりに表示されています。しかし、サイドメニューから(再)ページを開くと、グラフは表示されません。
ngAfterViewInit()
以前に作成したSVG要素がまだそこにある- 「)createChart(」と呼ばれ、順番に呼び出しを取得します:Google ChromeでTS/DOMを検査するとき、私は再開口は、次の行動を観察することができます
- 第SVG要素 が作成SVGがなくなっている
ngAfterViewInit()
後
createChart()
によって作成され、充填されています。 DOMは空の(またはキャッシュされた)テンプレートに置き換えられているようです。
だから私の質問は以下のとおりです。
- ここでうまくいきませんか?私は何を知るべきですか?
- どうすれば修正できますか?
こんにちはザウルス、あなたはこの問題を解決し、d3jsをIonic 2内で動作させるチャンス?ご意見ありがとうございます!アントワーヌ。 –