カスタムタグを通常のHTMLに置き換えるディレクティブがあります。削除したい属性がいくつかあります。たとえば、与えられた構文
<ui mybutton width="30"></mybutton>
私の指令はそれをに変換します
<div width="30" class="btn">bla bla </div>
"width=30"
を削除してstyle="width:{{old width value here}}"
を追加したい
私はコンパイルとリンク機能を試してきました。コンパイルまたはリンク関数でそれを行う必要がありますか?
テンプレートを変更したいので、コンパイル機能でそれをしなければならないと思った。
ライブで見る http://jsfiddle.net/WptGC/2/警告:ブラウザがハングするかもしれません!見るライブで安全 http://jsfiddle.net/WptGC/3/ すべてをクラッシュさせるコードがコメントされています。
.directive('mybutton', function($compile) {
return {
restrict: 'A',
//transclude: true,
template: '<div class="this is my subscreen div" style="width:{{width}}"></div>',
replace: false,
/*scope: {
width: '@',
height: '@',
x: '@',
y: '@'
},*/
compile: function($tElement, $tAttrs) {
console.log("subscreen template attrs:");
console.log($tAttrs);
var el = $tElement[0];
//el.getAttribute('width');
var stylewidth = el.getAttribute('width');
el.removeAttribute('width');
return function(scope) {
$compile(el)(scope);
}
}
}
})
奇妙なループが発生しています(console.logが数千回表示される)
他の要件を逃していない限り、次のような分離スコープとテンプレートを使用できるはずです。
app.directive('backbutton',function(){
return {
restrict: 'A',
replace:true,
scope: {
x: '@',
y: '@'
},
template:'<button style="width: {{x}}px; height: {{y}}px">A back-button template</button>',
link: function (scope, element, attrs) {
element.removeAttr('x').removeAttr('y');
}
}
});