18

我有一个指令用一些常规的 HTML 替换我的自定义标记。我想删除一些属性。例如,给定语法

<ui mybutton width="30"></mybutton>

我的指令将其转换为

<div width="30" class="btn">bla bla </div>

我想删除它"width=30"并添加style="width:{{old width value here}}"

我一直在尝试编译和链接功能。我应该在编译还是在链接函数中这样做?

我以为我必须在 compile 函数中执行此操作,因为我想在模板中进行修改。

在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 显示了几千次)

4

1 回答 1

29

除非我遗漏了其他一些要求,否则您应该能够使用隔离范围和模板,例如:

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');
    }
  }
});
于 2013-04-11T13:32:08.383 回答