2013-12-19 63 views
14

請注意,此問題的標題已更改爲更專注於確切問題的標題。見註釋流跟蹤是怎麼回事,我才意識到問題是AngularJS似乎並沒有處理{{isNaN()}}爲什麼{{isNan(x)}}在angularJS中不起作用?

我有以下的在我的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的

+0

你希望看到什麼? –

+1

xx null yy true zz –

+1

任何你將'option.selectedSubject'設置爲「null」而不是'null'的機會?檢出:http://jsfiddle.net/y3xzB/1/ – KayakDave

回答

18

這裏的問題不是isNaN。問題在於你正在調用一個不存在的$ scope變量的函數。

每個插入的文本片段('{{text}}')都與$ scope變量關聯,並根據該$ scope變量進行計算。

爲了讓事情變得簡單,如果$ scope.property不存在,可以即時創建$ scope.property。任何時候當你使用ngModel ='someProperty'或{{aPropertyName}}時,如果它不存在,則會自動爲你創建相應的$ scope.someProperty或$ scope.aPropertyName。但是,此快捷方式僅適用於基元。

函數調用總是針對$ scope進行評估,並且從不創建。這就是爲什麼你必須說$ scope。isNaN = isNaN,正如您在之前的評論中找到的那樣。

嘗試使用任何功能。 isArray,isNumber等等。除非你把一個$ scope.functionName = functionName放在控制器的某個地方,否則它不會工作。

編輯:另外,如果你真的想這樣做的插值isNaN試驗的權利,你可以利用JavaScript的類型的系統和使用

{{ property != property }} 

但是,這是不好的形式...

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

3

編輯:原來的問題是我能有{}}中的angularJS中的測試?$scope.option.selectedSubject應該是null而不是NaN。作者應該提出另一個問題,而不是將其改爲完全不同的問題。


回答原來的問題:

你可以把一個表達式中的綁定,因此你可以測試{{option.selectedSubject == NULL}}。如果評估結果不符合您的期望,請檢查您的範圍。

+0

我不知道還有什麼要檢查。以下是選項:{「selectedSubject」:null,「.....等等 –

相關問題