この問題は AngularJs とは関係ありません。jQuery Mobile が DOM のすべての変更を認識していないことがあったため、ヒントを与える必要があります。変更について jQuery Mobile に通知するcreate
には、要素でイベントをトリガーする必要があります。
ドキュメントによると(「新しいマークアップの強化」を参照):
ただし、新しいマークアップをクライアント側で生成するか、Ajax を介してコンテンツを読み込んでページに挿入する場合は、create イベントをトリガーして、新しいマークアップに含まれるすべてのプラグインの自動初期化を処理できます。これは任意の要素 (ページ div 自体も含む) でトリガーできるため、各プラグイン (リストビュー ボタン、選択など) を手動で初期化するタスクを節約できます。
したがってcreate
、コンテンツが含まれた直後にイベントをトリガーするだけです。
テンプレートでイベントをトリガーするだけのディレクティブを作成することをお勧めします。何かのようなもの:
app.directive('jqueryMobileTpl', function() {
return {
link: function(scope, elm, attr) {
elm.trigger('create');
}
};
});
次に、このディレクティブをテンプレートのルート要素に追加します。
<div jquery-mobile-tpl>
<ul data-role="listview" data-inset="true" data-theme="c">
<li><a href="#/detailsuser/a">A</a></li>
<li><a href="#/detailsuser/b">B</a></li>
<li><a href="#/detailsuser/c">C</a></li>
<li><a href="#/detailsuser/d">D</a></li>
</ul>
</div>
このディレクティブの優先度を低くすると、テンプレートを変更する可能性のある他のディレクティブを使用する場合、このディレクティブは jQuery Mobile にレンダリングを指示する前にすべての変更を待機します。作業サンプルはこちら.