Как проверить, является ли переменная области видимости undefined?
Это не работает:
<p ng-show="foo == undefined">Show this if $scope.foo == undefined</p>
Как проверить, является ли переменная области видимости undefined?
Это не работает:
<p ng-show="foo == undefined">Show this if $scope.foo == undefined</p>
Вот самый чистый способ сделать это:
<p ng-show="{{foo === undefined}}">Show this if $scope.foo === undefined</p>
Не нужно создавать вспомогательную функцию в контроллере!
Использование undefined
для принятия решения обычно является признаком плохого дизайна в Javascript. Вы можете подумать о том, чтобы сделать что-то еще.
Однако, чтобы ответить на ваш вопрос: я думаю, что лучший способ сделать это - добавить вспомогательную функцию.
$scope.isUndefined = function (thing) {
return (typeof thing === "undefined");
}
и в шаблоне
<div ng-show="isUndefined(foo)"></div>
Исправлено:
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' );
}
Если foo
не является логической переменной, тогда это будет работать (т.е. вы хотите показать это, когда эта переменная имеет некоторые данные):
<p ng-show="!foo">Show this if $scope.foo is undefined</p>
И наоборот:
<p ng-show="foo">Show this if $scope.foo is defined</p>
Отправка нового ответа с тех пор, как изменилось поведение Angular. Проверка равенства с undefined теперь работает в выражениях Angular, по крайней мере, с 1,5, как работает следующий код:
ng-if="foo !== undefined"
Если значение ng-if равно true, удаление свойства percentages из соответствующей области и вызов $digest удаляет элемент из документа, как и следовало ожидать.
Если вы используете Angular 1, я бы рекомендовал использовать встроенный метод Angular:
angular.isDefined(значение);
ссылка: https://docs.angularjs.org/api/ng/function/angular.isDefined
Вы можете использовать операцию двойной трубы, чтобы проверить, не является ли значение неопределенным, после оператора:
<div ng-show="foo || false">
Show this if foo is defined!
</div>
<div ng-show="boo || true">
Show this if boo is undefined!
</div>
Для технического объяснения двойной трубы, я предпочитаю взглянуть на эту ссылку: fooobar.com/questions/1143/...
Как писал @impulsgraw. Вам нужно проверить неопределенность после каналов:
<div ng-show="foo || undefined">
Show this if foo is defined!
</div>
<div ng-show="boo || !undefined">
Show this if boo is undefined!
</div>
<p ng-show="angular.isUndefined(foo)">Show this if $scope.foo === undefined</p>