为什么{{isNan(x)}}在angularJS中不起作用?

时间:2013-12-19 17:36:40

标签: angularjs

请注意,此问题的标题已更改为更专注于确切问题的标题。请参阅注释流,了解它是如何产生的,我意识到问题是AngularJS似乎没有处理{{isNaN()}}

我的HTML中有以下内容:

xx {{ option.selectedSubject }} yy {{ (option.selectedSubject == null) }} zz

我也试过了:

xx {{ option.selectedSubject }} yy {{ option.selectedSubject == null }} z

xx {{ option.selectedSubject }} yy {{ option.selectedSubject === null }} zz

有人可以帮我解释一下,当我查看我的页面时,为什么我会得到以下各项的以下内容:

xx null yy false zz

更新1 我尝试了以下内容:

aa {{ option.selectedSubject === "null" }} bb {{ option.selectedSubject == "null" }} cc

它给出了这个:

aa false bb false cc

更新2 我不确定这是否有帮助,但这里填充了option.selectedSubject的值。在这种情况下,本地存储中没有任何内容:

$scope.option.selectedSubject = parseInt(localStorage.get('selectedSubject'));

当我检查$ scope.option.selectedSubject的值时,它是 NaN

2 个答案:

答案 0 :(得分:20)

这里的问题不是isNaN。问题是你在$ scope变量上调用一个不存在的函数。

每个插入的文本片段('{{text}}')都与$ scope变量相关联,并根据该$ scope变量进行评估。

为了方便您,可以动态创建$ scope.property(如果它不存在)。无论何时使用ngModel ='someProperty'或{{aPropertyName}},都会自动为您创建corressponding $ scope.someProperty或$ scope.aPropertyName(如果它尚不存在)。但是,此快捷方式仅适用于基元。

函数调用始终针对$ scope进行评估,并且从不创建。这就是为什么你必须说$ scope.isNaN = isNaN,正如你在之前的评论中找到的那样。

尝试使用任何功能。 isArray,isNumber等。除非你将$ scope.functionName = functionName放在某个控制器中,否则它将无法工作。

编辑:另外,如果你真的想在插值中进行isNaN测试,你可以利用javascript的类型系统并使用

{{ property != property }}

但这是不好的形式......

http://plnkr.co/edit/wfLqzk8QxScsJPF5qY12?p=preview

答案 1 :(得分:3)

修改:原始问题是 我可以在angularJS中的{{}}内进行测试吗? $scope.option.selectedSubject本来是null而不是NaN。作者应该打开另一个问题,而不是将其改为完全不同的问题。


回答原始问题:

您可以在绑定中放置一个表达式,因此您可以测试{{option.selectedSubject == null}}。如果评估结果不符合您的预期,请检查您的范围。