2

アイデアは、ディレクティブ要素を、補間された文字列を参照する動的テンプレートに置き換えることです。

ディレクティブで element.html() を使用すると、文字列は適切に補間されますが、元のカスタム ディレクティブ html 要素が残ります。

element.replaceWith() を使用すると、文字列は補間されません。スコープに関連していると思いますが、何が問題なのかわかりません。

プランカー: http://plnkr.co/edit/HyBP9d?p=preview

アップデート

解決策を見つけました。使用element.replaceWith($compile(html)(scope));作品。

プランカーの更新: http://plnkr.co/edit/HyBP9d?p=preview

4

1 に答える 1

1

目的がわからないreplaceWIth。問題は、要素を置き換えるときに、それにバインドされているすべてのイベントとデータを置き換えることである可能性があります。これには、要素の角度スコープが含まれます。

提供されるデモの場合、次のように実行できます。

app.directive('status', function($compile) {       

        var linker = function(scope, element, attrs) {
            element.contents().wrap('<h'+attrs.value+'>')
        };

        return {
            restrict: 'E',
            replace: true,
            template:'<div>{{value}}</div>',
            transclude: true,
            link: linker,
            scope: {
                value: '='
            }
        };
    });

デモ:http://plnkr.co/edit/QDxIwE?p = Preview

于 2013-03-19T02:06:34.243 に答える