2013-10-29 4 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

고맙습니다. 지금까지 내가 본 최고의 해결책입니다. –

3

를 사용하여 할 수있는 하나의 방법이다는 작업 Plunkr입니다 :

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

두 가지 예가 있습니다. 하나는 float으로 포맷하고, 다른 하나는 날짜로 포맷합니다. 꽤 사소한 것처럼 내가하지 않았던 포맷 자체.

+0

고맙습니다. 그것은 두 번째 해결책이 될 수 있지만, 지금까지 나는 이전의 대답 (charlietfl에서)을 더 깨끗하고 쉽게 발견했습니다. –

+0

템플릿에 문자열을 연결하지 않아도되므로 내 솔루션이 더 깨끗하다고 ​​말할 수 있습니다. 게다가, 광산은 필터에 전달할 수있는 복잡한 물체에서도 작동합니다. –

+0

나는 그 점에 동의하지만 필터 유형에 따라 예가 바뀌는 방식이 마음에 들지 않습니다. –

관련 문제