私は角度2を使って簡単なWebアプリケーションを作成しています。私はそこに2つのコンポーネントを持っています。最初は基本的にいくつかのデータ行を持つテーブルです。クリックが行なわれると、行に対応するデータが第2のコンポーネントに表示される。データはXMLであり、コード要素にロードされます。それは何かのように見える構文2角度2で強調表示
@Component
export class TableComponent {
items: Data[];
selectedItemsXml: string;
...other stuff
//when row is clicked
toggleSelectedRow(rowIndex: number) {
...other stuff related to change row's background color
this.selectedItemsXml = this.items[i].xml;
}
...other stuff again
}
//TableComponent's template
<div>
<table>
...
...*ngFor="let item of items; let i = index;"...
<tr (click)="toggleSelectedRow(i)">
<td>{{item.id}}</td>
<td>{{item.time}}</td>
</tr>
...
</table>
</div>
<xml-detail [xml]="selectedItemsXml"></xml-detail>
@Component
export class XmlDetailComponent {
@Input() xml: string;
}
//XmlDetailComponent's template
<div>
<pre><code>{{xml}}</code></pre>
</div>
xmlのシンタックスハイライトを追加するまで、すべてうまくいきました。まず、ng2-prismプラグインを使いたかったのですが、正しく動作させるには問題がありました。 git repoで問題を見つけた後、私はそれを投げ捨てました。次に試したのは、この投稿に基づいてhighlight.jsを使用してディレクティブを作成することでした:highlight.js does not work with Angular 2。このメソッドを使用してXmlが強調表示されますが、最初の行のみがクリックされます。別の行をクリックすると、新しいxmlは表示されません。私もprism.jsを使用しようとしましたが、私は同じ動作をしています。一部のXML文字列が最初にバインドされ、コード要素に表示され、highlight.jsまたはprism.jsを使用して強調表示されると、それも残ります。
構文ハイライトを使用しないと、行が選択されるたびにコード要素にバインドして文字列を渡すので、角度2でDOMとデータバインディングがどのように機能するかは関係ありません。強調表示の原因を使用して文字列をバインドし、それをコード要素に渡してから、それを予期します。つまり、コード要素内に単純な文字列はありませんが、多くのスタイルのスパン要素があり、新しい行が選択されたときに新しいXML文字列をロードする問題が発生します。私はまた、Prism.highlight(text_to_prettify)を使って "pre-prettified"文字列をバインドしようとしましたが、このメソッドを使用すると、Prismによって追加されたすべてのspan要素を含むXMLが表示されます。
今、私はこの問題を解決する方法を考えている私の頭を傷つけています。どのように私はそれを働かせることができるか私にいくつかのプッシュを与えてください。
「新しい行が選択されたときに新しいXML文字列をロードする」という意味がわかりません。問題を明確にすることができますか? – pixelbits
こんにちは、短縮コード例を追加しました。多分今はもっと明白でしょう。 –