如何检查范围变量是否未定义?
这不起作用:
<p ng-show="foo == undefined">Show this if $scope.foo == undefined</p>
如何检查范围变量是否未定义?
这不起作用:
<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' );
}
小提琴:http: //jsfiddle.net/oakley349/vtcff0w5/1/
由于 Angular 的行为发生了变化,因此发布了新的答案。使用 undefined 检查相等性现在可以在角度表达式中使用,至少从 1.5 开始,因为以下代码有效:
ng-if="foo !== undefined"
当这个 ng-if 评估为 true 时,从适当的范围中删除 percents 属性并调用 $digest 会从文档中删除元素,正如您所期望的那样。
如果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 1,我建议您使用 Angular 的内置方法:
angular.isDefined(值);
参考:https ://docs.angularjs.org/api/ng/function/angular.isDefined
您可以使用双管道操作检查该值是否未定义 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>
对于双管的技术解释,我更喜欢看这个链接: https ://stackoverflow.com/a/34707750/6225126
正如@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>
试试这个 angular.isUndefined(value);
https://docs.angularjs.org/api/ng/function/angular.isUndefined
<p ng-show="angular.isUndefined(foo)">Show this if $scope.foo === undefined</p>