Comment vérifier si une variable de portée est ndefined?
Cela ne fonctionne pas:
<p ng-show="foo == undefined">Show this if $scope.foo == undefined</p>
Voici le moyen le plus propre de le faire:
<p ng-show="{{foo === undefined}}">Show this if $scope.foo === undefined</p>
Pas besoin de créer une fonction d'assistance dans le contrôleur!
Utiliser undefined
pour prendre une décision est généralement un signe de mauvaise conception en Javascript. Vous pourriez envisager de faire autre chose.
Cependant, pour répondre à votre question: je pense que la meilleure façon de le faire serait d’ajouter une fonction d’aide.
$scope.isUndefined = function (thing) {
return (typeof thing === "undefined");
}
et dans le modèle
<div ng-show="isUndefined(foo)"></div>
Corrigée:
HTML
<p ng-show="getFooUndef(foo)">Show this if $scope.foo === undefined</p>
JS
$scope.foo = undefined;
$scope.getFooUndef = function(foo){
return ( typeof foo === 'undefined' );
}
Si foo
est pas une variable booléenne alors cela fonctionnera (c'est-à-dire que vous voulez montrer ceci quand cette variable a des données):
<p ng-show="!foo">Show this if $scope.foo is undefined</p>
Et inversement:
<p ng-show="foo">Show this if $scope.foo is defined</p>
Publier une nouvelle réponse depuis le Angular comportement a changé. La vérification de l’égalité avec undefined fonctionne maintenant dans les expressions angular, au moins à partir de 1.5, de la même manière que le code suivant:
ng-if="foo !== undefined"
Lorsque la valeur ng-if est évaluée à true, la suppression de la propriété percentages de l'étendue appropriée et l'appel de $ digest suppriment l'élément du document, comme vous le souhaitiez.
Vous pouvez utiliser l'opération à double canal pour vérifier si la valeur n'est pas définie, l'instruction after:
<div ng-show="foo || false">
Show this if foo is defined!
</div>
<div ng-show="boo || true">
Show this if boo is undefined!
</div>
Pour des explications techniques sur le double tuyau, je préfère consulter ce lien: https://stackoverflow.com/a/34707750/6225126
Comme @impulsgraw l'a écrit. Vous devez rechercher les indéfinis après les tuyaux:
<div ng-show="foo || undefined">
Show this if foo is defined!
</div>
<div ng-show="boo || !undefined">
Show this if boo is undefined!
</div>
Si vous utilisez Angular 1, je vous recommanderais d'utiliser la méthode intégrée d'Angular:
angular.isDefined (valeur);
référence: https://docs.angularjs.org/api/ng/function/angular.isDefined