각도 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과 데이터 바인딩이 작동하는 방식과 관련이 있습니다. 강조 표시 원인을 사용하여 문자열을 바인딩하고 코드 요소에 전달한 다음이를 미리 적용합니다. 즉, 코드 요소 안에 간단한 문자열이 없지만 많은 스타일의 span 요소가 있다는 의미입니다. 새 행을 선택하면 새 XML 문자열을로드하는 데 문제가 발생합니다. 또한 Prism.highlight (text_to_prettify)를 사용하여 "pre-prettified"문자열을 바인딩하려고 시도했지만이 방법을 사용하면 프리즘에 의해 추가 된 모든 span 요소가있는 xml이 표시됩니다.
지금 당장이 문제를 해결하는 방법에 대해 생각하고 있습니다. 내가 어떻게 작동하게 할 수 있는지 알려줘.
"새 행을 선택할 때 새 xml 문자열로드"가 무슨 뜻인지 확실하지 않습니다. 문제를 명확하게 설명해 주시겠습니까? – pixelbits
안녕하세요, 단축 된 코드 예제를 추가했습니다. 어쩌면 지금은 더 분명 할 것 같습니다. –