2013-10-29 73 views
2

我想創建一個指令,我需要根據可能會有所不同的過濾器格式化一個值(取決於字段,它可能是「number:2」,「date」 ... 管他呢)。AngularJS:定製過濾器裏面的指令模板

所以我想在標記中使用指令時定義過濾器。 通過此遷移器描述場景:http://embed.plnkr.co/N2zKITFpUQMxmylAAGlt/preview

到目前爲止,未應用過濾器或引發錯誤。

什麼是實施它的正確方法? 感謝名單

回答

3

這裏有一個辦法做到這一點使用template:function(elem,attrs)

app.directive('editableField', function() { 
    return { 
     restrict: 'A', 
     replace: true, 
     template:function(elem,attrs) { 

     return '<div>' + 
      '<input ng-model="editableModel" />' + 
      '<div class="output">{{editableModel|'+attrs.editableFilter+' }}</div>' + 
      '</div>'; 
     }, 

    /* if using in a form....I would remove the isolated scope*/ 
     scope: { 
      editableModel: '=' 
     }, 
     controller: function($scope) {}, 
     link: function($scope, $element, $attrs, $filter) { 
     var input = $element.find('input'); 
     input.bind('click', function() { 
      this.select(); 
     }); 
     } 
    }; 
}); 

DEMO

+0

Thanx,迄今爲止我見過的最好的解決方案。 –

3

這裏是一個工作Plunkr:

http://plnkr.co/edit/nZgah7PtGRVMWBgKu7V8?p=preview

有兩個例子,一個將其格式化爲一個浮點數,另一個將其格式化爲日期格式。格式本身我沒有做,因爲它是相當微不足道的。

+0

Thanx。這可能是第二種解決方案,但到目前爲止,我發現以前的答案(來自charlietfl)更加簡潔。 –

+0

我會說我的解決方案更乾淨,因爲它不涉及串聯模板中的字符串。此外,我會爲複雜的對象工作,你可以傳遞給你的過濾器。 –

+0

我同意你的看法,但我不喜歡你的示例開啓過濾器類型的方式。 –