Si j'ai une expression {{ x }}
et x est undefined
ou null
, alors comment puis-je afficher un espace réservé pour celui-ci?
J'ai fourni une solution dans ma réponse, mais j'aimerais savoir de quelle autre manière il existe. Peut-être aussi pour l'espace réservé aux promesses.
{{ counter || '?'}}
. Juste du javascript pur. ||
peut être utilisé comme valeur par défaut. Puisqu'il s'agirait de messages vides différents dans chacun, une directive généralisée ne conviendrait pas dans de nombreux cas.
Si vous souhaitez appliquer une classe différente aux classes vides, c'est également intégré:
<div ng-class="{empty: !counter}" ng-bind="counter || ?"></div>
Je le ferais comme ça, mais peut-être qu'il y a une meilleure façon:
angular.module('app').filter('placeholdEmpty', function(){
return function(input){
if(!(input == undefined || input == null)){
return input;
} else {
return "placeholder";
}
}
});
puis utilisez {{ x | placeholdEmpty}}
Je le fais avec ng-show, comme ceci:
<strong>{{username}}</strong>
<span class="empty" ng-show="!username">N/A</span>
Bien sûr, cela ajoute beaucoup plus d'éléments à mon point de vue que je pourrais peut-être gérer différemment. J'aime bien à quel point il est facile de voir clairement où se trouvent mes valeurs d'espace réservé/vides, et je peux également les styler différemment.
Implémentez le filtre default
:
app.filter('default', function(){
return function(value, def) {
return (value === undefined || value === null? def : value);
};
});
Et utilisez-le comme:
{{ x | default: '?' }}
L'avantage de la solution filtrante sur {{ x || '?'}}
est que vous pouvez faire la distinction entre undefined
, null
ou 0
.
L'implémentation de filtres par défaut fonctionne, mais si vous n'utilisez que des nombres, vous pouvez utiliser les propres angulaires filtre numérique
Si l'entrée est nulle ou non définie, elle sera simplement renvoyée. Si l'entrée est infinie (Infinity ou -Infinity), le symbole Infinity '∞' ou '-∞' est retourné, respectivement. Si l'entrée n'est pas un nombre, une chaîne vide est renvoyée.
{{ (val | number ) || "Number not provided"}}