2015-04-22 74 views
1

比方說,我有一個指令,看起來像這樣:添加類transcluded元素

<input class="icon-input" type="text"> 

我想這結束了:

<div class="col-xs-12"> 
    <i ng-class="icon"></i> 
    <input class="icon-input" type="text" class="form-control"> 
</div> 

(以上釷顯著的部分是class="form-control"

我的指令目前看起來是這樣的:

'use strict'; 

class IconInput { 
    constructor() { 
    this.restrict = 'C'; 
    this.replace = true; 
    this.transclude = 'element'; 
    this.templateUrl = 'app/form-fields/icon-input/icon-input.html'; 
    this.scope = { icon: '@' } 
    } 
} 

export default IconInput; 

如何將class="form-control"添加到我包含的input元素中?

+0

您應該只輸入輸入,並從外部傳遞類,int輸入定義。 – Fals

+0

你是什麼意思「僅輸入輸入」?我認爲那就是我所做的。 –

+0

你正在做的方式,一切都被模板替換。如果使用ng-transclude作爲模板的一部分,它將替換原始輸入+模板的其餘部分。 – Fals

回答

2

我最終搞清楚了自己。

'use strict'; 

class IconInput { 
    constructor() { 
    this.restrict = 'C'; 
    this.transclude = true; 
    this.scope = { icon: '@' }; 

    this.compile = (element, attrs, transclude) => { 
     return $scope => { 
     transclude($scope, clone => { 
      element.append(clone) 
      .wrap('<div class="col-xs-12"></div>') 
      .before(`<i class="fa ${$scope.icon}"></i>`) 
      .addClass('form-control'); 
     }); 
     }; 
    }; 
    } 
} 

export default IconInput;