にロードされたときに、私はかなりこだわっていると私の問題を解決する方法がわからない...スクリプトタグテンプレートDOMは
簡体:私はに基づいてULISTを作成するコンポーネントを持っていますこのように、結合:
@Component({
selector: "template",
template: `
<ul>
<li *ng-for="#challenge of jobs.challenges">{{challenge}}</li>
</ul>
`})
export class JobTemplate{
jobs: Jobs;
constructor(jobs:Jobs){
this.jobs = jobs
}
}
成分セレクタ/ホストは、PHPによってエコー通常のHTMLフローに埋め込まれ、事前に定義されたULISTを置き換えるために使用されます。問題は、通常のサイトでは、ulistの後のscriptタグを使ってjqueryの魔法をリストに適用したことです。
コンポーネントのテンプレートのロードが完了する前にスクリプトタグがエコーアウトされるため、jquery呼び出しでテンプレートDOMの要素が見つかりません。私のテンプレートの中に(最後の)スクリプトタグを入れても機能しません。それは単に無視されるようです。
<ul>
<a><li *ng-for="#challenge of jobs.challenges">{{challenge}}</li></a>
</ul>
<script>
$("ul a").on("click", function (event)
{
var parent = $(this).parent();
if(parent.hasClass('active'))
....slideToggle("normal");
else
....
});
</script>
また、サイトには、Foundationフレームワークを使用し、それぞれの時間は、新たな要素が(外部から更新されて、私のコンポーネントの結合を介して例えば)ページに追加された私は$(document).foundation()
を呼び出す必要があります。
私の質問は、テンプレートが作成されたかどうかわからないとき、テンプレートDOMでjqueryを呼び出すためにどのように達成できますか。 onloadハンドラは、コンポーネントテンプレートで定義されている場合でも動作しません。
私はAfterViewInitについて読んだことがありますが、私はそれに圧倒されています。 誰かが私を正しい方向に押し込んでくれますか?
コンポーネントのテンプレートが「メイン」DOMに完全に挿入されたことを確認するにはどうすればよいですか?
[APIドキュメント](https:// angular。io/docs/ts/latest/api/core/AfterViewInit-interface.html)を使用して、コンポーネントにngAfterViewInit()メソッドを追加し、そこでjQueryコードを呼び出してみることができます。 –
@ MarkRajcok +1。 OPは、AfterViewInitを実装する必要があることに注意してください。また、ang2で絶対に必要な場合を除いて、jQuery(テンプレートとデータバインディングのソリューションを使用することを推奨)を使用したくないことに注意してください。 – drewmoore
テンプレートが完全にロードされたときに 'AfterViewInit'と' AfterContentInit'のどちらも起動しませんテンプレートは非同期に配信されるソースにバインドされています)。バインディングが変更されたときに、 '#a(click)=" addHandler(a) "'でテンプレート自体にハンドラを作成し、 'AfterViewChecked'を使って' jQuery(document).foundation() 'を適用することで解決しました。ありがとう! – ch40s