appliquer la mise en forme du filtre dynamiquement dans un ng-repeat
Mon but est d'appliquer un filtre de mise en forme est définie comme une propriété de la boucle de l'objet.
La prise de ce tableau d'objets:
[
{
"value": "test value with null formatter",
"formatter": null,
},
{
"value": "uppercase text",
"formatter": "uppercase",
},
{
"value": "2014-01-01",
"formatter": "date",
}
]
Le modèle de code, je suis en train d'écrire ceci:
<div ng-repeat="row in list">
{{ row.value | row.formatter }}
</div>
Et je suis attend de voir ce résultat:
test value with null formatter
UPPERCASE TEXT
Jan 1, 2014
Mais peut-être obviusly ce code génère une erreur:
Unknown provider: row.formatterFilterProvider <- row.formatterFilter
Je ne peux pas immagine comment analyser le "formateur" paramètre à l'intérieur de la {{ }}; quelqu'un peut-il m'aider?
Voir le plunkr http://plnkr.co/edit/YnCR123dRQRqm3owQLcs?p=preview
- Je suis désolé, peut-être que mon post n'est pas clair: je n'ai pas besoin de filtrer le tableau. J'ai besoin de format de la "valeur" de la chaîne basée sur le "formateur de table" propriété.
Vous devez vous connecter pour publier un commentaire.
La
|
angulaire de construire qui trouve un filtre défini avec le nom et l'applique à la valeur sur la gauche. Je pense que vous devez faire est de créer un filtre qui prend un filtre nom comme un argument, puis appelle le filtre approprié (fiddle) (adapté de M59 du code):HTML:
Javascript:
Grâce à @karlgold commentaire, voici une version qui prend en charge les arguments. Le premier exemple utilise la
add
filtre directement pour ajouter des numéros à un numéro existant et la seconde utilise leuseFilter
filtre pour sélectionner lesadd
filtre par chaîne et de passer des arguments à (fiddle):HTML:
Javascript:
var filterName
gère la situation où aucun filtre n'a été défini.var filterName = [].splice.call(arguments, 1, 1)[0];
au lieu devar filterName = arguments[1];
filterName
de laarguments
de la matrice de sorte que le reste de la arguments peuvent être passés au filtre d'appels à la ligne suivante.J'aime le concept derrière ces réponses, mais ne pense pas qu'ils donner le plus flexible possible solution.
Ce que je voulais vraiment faire, et je suis sûr que certains lecteurs penseront de même, est d'être capable de passer dynamiquement d'une expression de filtre, qui serait alors d'évaluer et de retourner le résultat approprié.
De sorte qu'un seul filtre personnalisé seraient en mesure de traiter tous les éléments suivants:
{{ammount | picker:'currency:"$":0'}}
{{date | picker:'date:"yyyy-MM-dd HH:mm:ss Z"'}}
{{name | picker:'salutation:"Hello"'}}
//Appliquer un autre filtre personnaliséJe suis venu avec le morceau de code suivant, qui utilise la
$interpolate
service dans mon filtre personnalisé. Voir la jsfiddle:Javascript
Une façon est d'utiliser une fonction pour la liaison et de faire le filtrage à l'intérieur de cette fonction. Cela peut ne pas être la meilleure approche: Démonstration en direct (clic).
JavaScript:
J'avais un peu besoin différent et donc modifié la réponse ci-dessus un peu (le
$interpolate
solution frappe le même objectif, mais est encore limitée):Utilisation:
De données:
(
percentage
est un filtre personnalisé qui repose surnumber
)De crédit dans ce post, Jason Goemaat.
Voici comment je l'ai utilisé.
J'ai amélioré @Jason Goemaat de répondre un peu en ajoutant une case si le filtre existe, et si pas de retour, le premier argument par défaut:
La version la plus récente de ng-tableau permet dynamique de la création de la table (ng-dynamique-table) basé sur une configuration de colonne. Le formatage d'un champ date est aussi facile que d'ajouter le format de votre valeur d'un champ dans votre tableau de colonnes.
Donné
J'ai fini par faire quelque chose d'un peu plus brut, mais moins impliquant:
HTML:
Utiliser l'opérateur ternaire pour vérifier si il y a un filtre défini pour la ligne:
JS:
Dans le tableau de données en Javascript à ajouter le filtre:
C'est ce que j'utilise (Angulaire de la Version 1.3.0-beta.8 accidentelle-haïku).
Ce filtre vous permet d'utiliser des filtres avec ou sans les options de filtre.
applyFilter va vérifier si le filtre existe dans Angulaire, si le filtre n'existe pas, un message d'erreur avec le filtre de nom dans le navigateur de la console comme si...
Lors de l'utilisation de ng-repeat, certaines valeurs ne sera pas défini. applyFilter traitera de ces questions avec un soft fail.
Puis vous utilisez ce filtre que vous voulez, ce qui peut ou peut ne pas avoir le choix.
Ou vous pouvez utiliser avec des données séparées des structures lors de la construction d'une table.
Si vous trouvez que vous avez besoin pour passer des valeurs plus spécifiques, vous pouvez ajouter d'autres arguments comme ça...
Ensuite dans votre code HTML peut-être que votre filtre nécessite également une clé de la ligne objet