programing

angularjs에서 기존 필터를 확장하거나 재정의하려면 어떻게 해야 합니까?

iphone6s 2023. 3. 13. 20:15
반응형

angularjs에서 기존 필터를 확장하거나 재정의하려면 어떻게 해야 합니까?

기존의 "표준" 필터를 확장할 수 있습니까?date,number,lowercaseetc)? 내 경우 YYYMMDDhhmmss 형식의 날짜를 해석해야 하므로 확장(또는 덮어쓰기)하고 싶다.date직접 쓰는 대신 필터링을 할 수 있습니다.

나는 Angular에서 매우 쉬운 데코레이터 패턴을 구현하는 것을 선호한다.JS.
@pkozlowski.opensource의 예를 들어 다음과 같이 변경할 수 있습니다.

 myApp.config(['$provide', function($provide) {
  $provide.decorator('dateFilter', ['$delegate', function($delegate) {
    var srcFilter = $delegate;

    var extendsFilter = function() {
      var res = srcFilter.apply(this, arguments);
      return arguments[2] ? res + arguments[2] : res;
    }

    return extendsFilter;
  }])
}])

그리고 보기에서는 둘 다 사용할 수 있습니다.표준 출력과 확장 동작.
같은 필터로

<p>Standard output : {{ now | date:'yyyyMMddhhmmss' }}</p>
<p>External behavior : {{ now | date:'yyyyMMddhhmmss': ' My suffix' }}</p>

다음은 두 가지 기술을 모두 설명하는 바이올린입니다.http://jsfiddle.net/ar8m/9dg0hLho/

질문을 제대로 이해했는지 모르겠지만, 기존 필터의 기능을 확장하고 싶다면 기존 필터를 장식하는 새로운 필터를 만들 수 있습니다.예:

myApp.filter('customDate', function($filter) {
    var standardDateFilterFn = $filter('date');
    return function(dateToFormat) {
     return 'prefix ' + standardDateFilterFn(dateToFormat, 'yyyyMMddhhmmss');
    };
});

그런 다음 템플릿에서 다음을 수행합니다.

{{now | customDate}}

위에서 설명한 바와 같이 단순히 지정된 형식에 따라 날짜 형식을 지정할 경우 기존 날짜 필터로 이 작업을 수행할 수 있습니다.

{{now | date:'yyyyMMddhhmmss'}}

다음은 두 가지 기술을 설명하는 jsFiddle입니다.http://jsfiddle.net/pkozlowski_opensource/zVdJd/2/

형식이 지정되지 않은 경우 각도JS는 이것이 '중간' 형식이라고 가정합니다(정확한 형식은 로케일에 따라 다릅니다).자세한 것은, http://docs.angularjs.org/api/ng.filter:date 를 참조해 주세요.

마지막 발언:질문의 '파스' 부분이 좀 헷갈리네요.필터는 오브젝트(이 경우 날짜)를 문자열로 해석하기 위해 사용되며, 그 반대의 경우는 사용되지 않습니다.날짜를 나타내는 문자열을 (입력에서) 해석한 후 NgModelController#$parsers를 조사해야 합니다(http://docs.angularjs.org/guide/forms)의 "Custom Validation" 부분을 참조하십시오).

언급URL : https://stackoverflow.com/questions/12236905/how-to-extend-or-override-existing-filters-in-angularjs

반응형