AngularJS удаляет атрибуты
У меня есть директива, которая заменяет мой пользовательский тег некоторым регулярным 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 появляется несколько тысяч раз)
Ответы
Ответ 1
Если мне не хватает какого-либо другого требования, вы должны просто использовать область выделения и шаблон, например:
http://jsfiddle.net/WptGC/6/
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');
}
}
});