Czy można rozszerzyć istniejące filtry "standardowe" (date
, number
, lowercase
itd.)? W moim przypadku muszę przeanalizować datę z formatu RRRRMMDDhmmmm, więc chciałbym przedłużyć (lub przesłonić) filtr date
zamiast pisać własny.Jak rozszerzyć lub zastąpić istniejące filtry w angularjs?
Odpowiedz
Nie jestem pewien, czy dobrze rozumiem twoje pytanie, ale jeśli chciałbyś rozszerzyć funkcjonalność istniejących filtrów, możesz stworzyć nowy filtr, który zdobi istniejący. Przykład:
myApp.filter('customDate', function($filter) {
var standardDateFilterFn = $filter('date');
return function(dateToFormat) {
return 'prefix ' + standardDateFilterFn(dateToFormat, 'yyyyMMddhhmmss');
};
});
a następnie w szablonie:
{{now | customDate}}
Mimo powyższego, jeśli po prostu chcesz sformatować datę stosownie do danego formatu można to zrobić z istniejącym filtrem data :
{{now | date:'yyyyMMddhhmmss'}}
Oto jsFiddle ilustrujący pracę obu technik: http://jsfiddle.net/pkozlowski_opensource/zVdJd/2/
Należy pamiętać, że jeśli format nie jest określony, AngularJS zakłada, że jest to format "średni" (dokładny format zależy od ustawień regionalnych). Sprawdź numer http://docs.angularjs.org/api/ng.filter:date, aby uzyskać więcej informacji.
Ostatnia uwaga: jestem nieco zdezorientowany, jeśli chodzi o "parsowanie" części pytania. Rzecz w tym, że filtry służą do analizowania obiektu (w tym przypadku daty), a nie wersetu. Jeśli analizowane są ciągi (z danych wejściowych) reprezentujących daty, należy zajrzeć do parserów $ NgModelController # (sprawdź część "Custom Validation" w http://docs.angularjs.org/guide/forms).
wolę wdrożenia decorator pattern, a właściwie w kątowa jest bardzo proste ..
Tak więc, jeśli weźmiemy @ pkozlowski.opensource przykład, można zrobić coś takiego:
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;
}])
}])
a następnie w swoich widokach możesz używać zarówno standardowych, jak i rozszerzonych zachowań.
z tym samym filtrem
<p>Standard output : {{ now | date:'yyyyMMddhhmmss' }}</p>
<p>External behavior : {{ now | date:'yyyyMMddhhmmss': ' My suffix' }}</p>
Oto jsFiddle ilustrujący pracę obu technik: http://jsfiddle.net/ar8m/9dg0hLho/
To jest absolutnie w 100% dokładnie to, czego potrzebowałem. Wezmę głos, trzy razy, jeśli zdołam. –
To jest poprawna odpowiedź. Pamiętaj jednak, że aby je pobrać, musisz dodać "Filtr". Odtworzenie filtru o tej samej nazwie jest również w porządku, ponieważ zazwyczaj (zawsze?) Jest to jedna funkcja, którą zamierzacie zmienić w dowolny sposób. –
Świetne podejście. q: pierwszy parametr 'srcFilter.apply (...)' jest 'tym', jednak widziałem inne przykłady, że pierwszym parametrem jest 'null'. jaki jest cel? –
- 1. Jak zastąpić istniejące komponenty natywne reagujące natywnie
- 2. Jak mogę rozszerzyć konstruktor zasobów AngularJS ($ resource)?
- 3. AngularJS - jak zastąpić dyrektywę ngClick
- 4. Filtry Log4Net "LUB"
- 5. AngularJS: Niestandardowe filtry i powtórzenie ng
- 6. Jak rozszerzyć metodę WinForm's Dispose?
- 7. Autoryzuj filtry a Filtry akcji
- 8. Jak rozszerzyć protokoły numeryczne w Clojure
- 9. Filtry Backbone.js i filtry Tastypie
- 10. Jak rozszerzyć zmienną Tensorflowa
- 11. Czy można zawinąć PDO lub rozszerzyć go?
- 12. Jak zresetować filtry w Fiddler?
- 13. Jak rozszerzyć zasoby Boto3?
- 14. Firebase: Filtry w kohortach
- 15. rozszerzyć lub wdrożyć SimpleXML uniknąć DRY
- 16. Nieokreślona lub null dla AngularJS
- 17. Jak rozszerzyć klasy bootstrap?
- 18. Jak rozszerzyć ramkę do odtwarzania?
- 19. Jak rozszerzyć widżet jquery ui? (1.7)
- 20. Jak rozszerzyć klasę ORDLADO na Android, aby rozszerzyć funkcjonalność?
- 21. Jak rozszerzyć lekkiego dostawcę w Chef
- 22. Jak usunąć lub zastąpić linię tekstu w DrRacket?
- 23. Jak usunąć lub zastąpić plik w archiwum zip?
- 24. Jak zastąpić przecinek kropką w liczbie (lub jakiejkolwiek innej)
- 25. Jak rozszerzyć wbudowane typy C#, takie jak ciąg?
- 26. Czy można rozszerzyć właściwości HttpContext.Current.User.Identity
- 27. Jak usunąć istniejące węzły w d3.js
- 28. Jak edytować istniejące zapytanie w raporcie kryształowym
- 29. Jak mogę rozszerzyć ApplicationController w klejnot?
- 30. Jak zastąpić znak w SQL
według daty dokumentacja filtra może przyjąć termin jak ISO 8601 sformatowane ciągów. W moim przypadku format wejściowy to "yyyyMMddHHmmss", więc standardowy filtr 'date' nie może go przeanalizować. – coxx