que - directivas personalizadas angularjs
¿Cómo verificar si una variable de alcance no está definida en la plantilla AngularJS? (9)
¿Cómo verificar si una variable de alcance no está definida ?
Esto no funciona:
<p ng-show="foo == undefined">Show this if $scope.foo == undefined</p>
Aquí está la forma más limpia de hacer esto:
<p ng-show="{{foo === undefined}}">Show this if $scope.foo === undefined</p>
¡No es necesario crear una función auxiliar en el controlador!
Como escribió @impulsgraw. Debe verificar si no está definido después de las tuberías:
<div ng-show="foo || undefined">
Show this if foo is defined!
</div>
<div ng-show="boo || !undefined">
Show this if boo is undefined!
</div>
Corregido:
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'' );
}
Publicar una nueva respuesta ya que el comportamiento angular ha cambiado. Comprobar la igualdad con indefinido ahora funciona en expresiones angulares, al menos a partir de 1.5, como funciona el siguiente código:
ng-if="foo !== undefined"
Cuando este ng-if se evalúa como verdadero, eliminar la propiedad de porcentajes del alcance apropiado y llamar a $ digest elimina el elemento del documento, como era de esperar.
Puede usar la operación de doble tubería para verificar si el valor no está definido en la instrucción 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>
Verifique JSFiddle para la demostración
Para obtener una explicación técnica de la tubería doble, prefiero consultar este enlace: https://.com/a/34707750/6225126
Si
foo
no
es
una variable booleana
, esto funcionaría (es decir, desea mostrar esto cuando esa variable tenga algunos datos):
<p ng-show="!foo">Show this if $scope.foo is undefined</p>
Y viceversa:
<p ng-show="foo">Show this if $scope.foo is defined</p>
Si está usando Angular 1, recomendaría usar el método incorporado de Angular:
angular.isDefined (valor);
referencia: https://docs.angularjs.org/api/ng/function/angular.isDefined
Usar
undefined
para tomar una decisión suele ser un signo de mal diseño en Javascript.
Podría considerar hacer otra cosa.
Sin embargo, para responder a su pregunta: creo que la mejor manera de hacerlo sería agregar una función auxiliar.
$scope.isUndefined = function (thing) {
return (typeof thing === "undefined");
}
y en la plantilla
<div ng-show="isUndefined(foo)"></div>
<p ng-show="angular.isUndefined(foo)">Show this if $scope.foo === undefined</p>