59

如何检查范围变量是否未定义

这不起作用:

<p ng-show="foo == undefined">Show this if $scope.foo == undefined</p>
4

10 回答 10

69

这是最干净的方法:

<p ng-show="{{foo === undefined}}">Show this if $scope.foo === undefined</p>

无需在控制器中创建辅助函数!

于 2015-05-02T20:52:40.993 回答
28

用来undefined做决定通常是 Javascript 中糟糕设计的标志。你可以考虑做点别的。

但是,要回答您的问题:我认为最好的方法是添加一个辅助函数。

$scope.isUndefined = function (thing) {
    return (typeof thing === "undefined");
}

并在模板中

<div ng-show="isUndefined(foo)"></div>
于 2014-11-20T15:11:29.783 回答
9

更正:

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/

于 2014-11-20T15:02:47.710 回答
6

由于 Angular 的行为发生了变化,因此发布了新的答案。使用 undefined 检查相等性现在可以在角度表达式中使用,至少从 1.5 开始,因为以下代码有效:

ng-if="foo !== undefined"

当这个 ng-if 评估为 true 时,从适当的范围中删除 percents 属性并调用 $digest 会从文档中删除元素,正如您所期望的那样。

于 2017-03-20T21:23:10.753 回答
3

如果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>

于 2016-12-05T00:06:25.850 回答
1

如果您使用的是 Angular 1,我建议您使用 Angular 的内置方法:

angular.isDefined(值);

参考:https ://docs.angularjs.org/api/ng/function/angular.isDefined

于 2017-03-20T11:01:34.800 回答
1

您可以使用双管道操作检查该值是否未定义 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>

检查 JSFiddle 以获取演示

对于双管的技术解释,我更喜欢看这个链接: https ://stackoverflow.com/a/34707750/6225126

于 2018-02-18T08:14:39.683 回答
1

正如@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>

https://jsfiddle.net/mjfz2q9h/11/

于 2019-06-05T13:23:31.537 回答
-1

试试这个 angular.isUndefined(value);

https://docs.angularjs.org/api/ng/function/angular.isUndefined

于 2020-02-03T09:29:35.190 回答
-3

<p ng-show="angular.isUndefined(foo)">Show this if $scope.foo === undefined</p>

于 2015-05-20T18:25:35.297 回答