È possibile estendere i filtri "standard" esistenti (date
, number
, lowercase
ecc.)? Nel mio caso ho bisogno di analizzare la data dal formato YYYYMMDDhhmmss, quindi mi piacerebbe estendere (o sostituire) il filtro date
invece di scrivere il mio.Come estendere o sovrascrivere i filtri esistenti in angularjs?
risposta
Non sono sicuro di aver compreso correttamente la domanda, ma se si desidera estendere la funzionalità dei filtri esistenti è possibile creare un nuovo filtro che ne decori uno esistente. Esempio:
myApp.filter('customDate', function($filter) {
var standardDateFilterFn = $filter('date');
return function(dateToFormat) {
return 'prefix ' + standardDateFilterFn(dateToFormat, 'yyyyMMddhhmmss');
};
});
e poi, nel modello:
{{now | customDate}}
Detto quanto sopra, se si vuole semplicemente formattare una data in base ad un determinato formato di questo può essere fatto con il filtro della data attuale :
{{now | date:'yyyyMMddhhmmss'}}
Ecco la jsFiddle lavoro illustrante due tecniche: http://jsfiddle.net/pkozlowski_opensource/zVdJd/2/
Si noti che se un formato non viene specificato, AngularJS presumerà che questo sia formato "medio" (il formato esatto dipende da una locale). Controlla http://docs.angularjs.org/api/ng.filter:date per ulteriori informazioni.
L'ultima osservazione: sono un po 'confuso riguardo alla parte "parse from" della tua domanda. Il fatto è che i filtri sono utilizzati per analizzare un oggetto (data in questo caso) per la stringa e non viceversa. Se si sta analizzando le stringhe (da un input) che rappresentano le date, è necessario esaminare i parser NgModelController # $ (selezionare la parte "Convalida personalizzata" in http://docs.angularjs.org/guide/forms).
preferisco per l'attuazione del decorator pattern, e in realtà in angolare è molto facile ..
Quindi, se prendiamo ad esempio @ pkozlowski.opensource, si può fare qualcosa di simile:
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;
}])
}])
E poi nelle tue visualizzazioni, puoi usare entrambi .. lo standard output e il comportamento esteso.
con lo stesso filtro
<p>Standard output : {{ now | date:'yyyyMMddhhmmss' }}</p>
<p>External behavior : {{ now | date:'yyyyMMddhhmmss': ' My suffix' }}</p>
Ecco la jsFiddle di lavoro che illustra entrambe le tecniche: http://jsfiddle.net/ar8m/9dg0hLho/
Questo è assolutamente al 100% esattamente ciò di cui avevo bisogno. Mi piacerebbe votare tre volte se potessi. –
Questa è la risposta corretta. Ma ricorda che devi aggiungere '' 'Filter''' per i filtri per ottenerli. Anche ricreare un filtro con lo stesso nome va bene per me, dato che di solito (sempre?) Una singola funzione, cambierai in qualsiasi modo. –
Ottimo approccio. q: il primo parametro di 'srcFilter.apply (...)' è 'this', tuttavia ho visto altri esempi che il primo parametro è' null'. qual è il suo scopo? –
- 1. Come sovrascrivere i file esistenti in batch?
- 2. IList.Add() sovrascrivere i dati esistenti
- 3. Posso sovrascrivere/estendere i metodi Meteor?
- 4. Come sovrascrivere i file esistenti utilizzando Rubyzip lib
- 5. Unire cartelle con NSFileManager, sovrascrivere solo i file esistenti
- 6. In Express e Node.js, è possibile estendere o sovrascrivere i metodi dell'oggetto risposta?
- 7. File batch per eseguire xcopy senza sovrascrivere i file esistenti
- 8. Come sovrascrivere gli elementi esistenti con Folder.CopyHere in PowerShell?
- 9. Posso impedire a Firebase set() di sovrascrivere i dati esistenti?
- 10. AngularJS - Multiple utilizzo Filtri controller
- 11. Come sovrascrivere/estendere una classe interna da una sottoclasse?
- 12. Come estendere i tipi di C# built-in, come String?
- 13. intercettori o filtri
- 14. Filtri Django - o?
- 15. Google Cloud Storage - GSUtil - Copia file, ignora esistenti, non sovrascrivere
- 16. Come copiare determinati file (senza gerarchia di cartelle), ma non sovrascrivere i file esistenti?
- 17. Come estendere i tipi immutabili in Java
- 18. Come registrare le impostazioni utente predefinite usando NSUserDefaults senza sovrascrivere i valori esistenti?
- 19. AngularJS: filtri personalizzati e ng-repeat
- 20. Strutture concatenate: Aggiorna i campi della struttura senza sovrascrivere i campi esistenti
- 21. Come creare direttive AngularJs riutilizzabili che copiano le direttive esistenti
- 22. come estendere LoginUrlAuthenticationEntryPoint o come implementare AuthenticationEntryPoint
- 23. Uso dei filtri con le direttive in AngularJS
- 24. Come evitare che i dispositivi Django siano in conflitto con i dati esistenti
- 25. AngularJS - Iniezione di dipendenza in servizi, fabbriche, filtri ecc.
- 26. Come gestire i servizi XML in AngularJS?
- 27. Nodelist di filtri o mappe in ES6
- 28. Come mantenere i dati esistenti nella base del divano e aggiornare solo i nuovi dati senza sovrascrivere
- 29. I filtri personalizzati in NUnit sono possibili?
- 30. Visual Studio 2012 Web Publish continua a sovrascrivere i file esistenti con la stessa versione
Secondo filtro data di documentazione in grado di accettare le date come ISO 8601 stringhe formattati. Nel mio caso, il formato di input è 'yyyyMMddHHmmss', quindi la 'data' del filtro standard non può analizzarla. – coxx