ng-repeat ディレクティブを独自のカスタム ディレクティブと組み合わせて使用すると問題が発生します。
HTML:
<div ng-app="myApp">
<x-template-field x-ng-repeat="field in ['title', 'body']" />
</div>
JS:
angular.module('myApp', [])
.directive('templateField', function () {
return {
restrict: 'E',
compile: function(element, attrs, transcludeFn) {
element.replaceWith('<input type="text" />');
}
};
});
jSFiddleを参照してください
ここでの問題は、何も置き換えられないことです。私が達成しようとしているのは、「x-template-field」タグが DOM で完全に置き換えられた 2x 入力フィールドの出力です。私の疑いでは、ng-repeat は同時に DOM を変更しているため、これは機能しません。
このスタック オーバーフローの質問によると、受け入れられた回答は、これが以前のバージョンの AngularJS (?) で実際に機能していたことを示しているようです。
element.html('...') は機能しませんか?
element.html('...') は実際には生成された HTML をターゲット要素に挿入しますが、HTML をテンプレート タグの子要素にするのではなく、DOM で完全に置き換えます。
ng-repeat ディレクティブを持つ別のタグでテンプレート タグをラップしないのはなぜですか?
基本的に、上記と同じ理由で、生成された HTML を繰り返しタグの子要素として使用したくありません。おそらく私のアプリケーションでは適切に機能するでしょうが、マークアップを Angular に合わせて調整したように感じますが、その逆ではありません。
「テンプレート」プロパティを使用しないのはなぜですか?
「template」/「templateUrl」プロパティから取得した HTML を変更する方法が見つかりませんでした。挿入したい HTML は静的ではなく、外部データから動的に生成されます。
マークアップにこだわりすぎていませんか?
おそらく。:-)
どんな助けでも大歓迎です。