<h1>
のように、レベルを属性として渡すことができるネストされたテンプレート(深さを渡すため)のようなタグが必要です。独自のタグ名を定義された文字列に設定するAngularJSディレクティブ
これは次のようになります。予想通り、あなたはディレクティブにテンプレートを設定することができhttp://plnkr.co/edit/tt1oJySS4j0FmamEYBEr?p=preview
<h1>
のように、レベルを属性として渡すことができるネストされたテンプレート(深さを渡すため)のようなタグが必要です。独自のタグ名を定義された文字列に設定するAngularJSディレクティブ
これは次のようになります。予想通り、あなたはディレクティブにテンプレートを設定することができhttp://plnkr.co/edit/tt1oJySS4j0FmamEYBEr?p=preview
で見ることができるように、このアプローチは動作しません
.directive('hx', function() {
return {
restrict: 'E', transclude: true, replace: true,
link: function(scope, element, attrs) {
this.template = '<h' + attrs.level + ' ng-transclude></h' + scope.level + '>'
}
}
})
。リンク機能が実行されるたびに、テンプレートが変更されます。コードの最初の<hx>
要素にテンプレートがないため、何も表示されません。 2番目のテンプレートは最初のテンプレート(h1)を使用し、3番目のテンプレートは2番目のテンプレート(h1)を使用します。
代わりに、あなたはディレクティブのためtransclude
機能を使用したい:これはあなたがclone
にトランスクルードコンテンツにアクセスすることができます
link: function(scope, element, attrs, ctrl, transclude) {
transclude(scope, function (clone) {
const header = angular.element('<h' + attrs.level + '></h' + attrs.level + '>');
header.append(clone);
element.append(header);
// element.replaceWith(header); // variant replace=true
});
}
。次に、適切なレベルの新しいヘッダー要素を作成し、その内容に(clone
)の内容を追加し、そのヘッダー要素をhx
に追加します。
ほぼ完璧!あなたの解決策では、置き換え:真、もう動作しないという問題だけがあります。それを修正することはできますか? –
私はこれを上記のコメントに追加しました。 –
あなたが持っている問題をより具体的にしてください。 –