2013-09-23 58 views
7

有可能在angularjs的typeof使用使用的instanceof?AngularJs表達

我有一個ngrepeat該循環槽我的數據,應檢查數據字符串或對象。

<tr ng-repeat="text in data"> 
    <td>{{angular.isObject(text) && 'IsObject'||text}}</td> 
</tr> 

回答

4

聽起來像是一個好地方,使用過濾器:

<tr ng-repeat="text in data"> 
    <td>{{text|displayText}}</td> 
</tr> 
angular.module('myApp').filter('displayText', function() { 
    return function(text) { 
     return angular.isObject(text) ? 'IsObject' : text; 
    }; 
}); 
+1

實際上,這是一個非常糟糕的地方使用過濾器。如果您繼續以類似的方式在其他地方使用過濾器,這不是過濾器的目標,並且可能會導致一些嚴重不良的代碼。更好的方法是使用函數。 –

+0

@TomBull爲什麼在這種情況下使用過濾器不好? – Zorgatone

+0

請參閱我的答案上的評論... –

7

在這種情況下使用的過濾器,它顯然是在你的控制器功能的地方:

<tr ng-repeat="text in data"> 
    <td>{{isThisAnObject(text)}}</td> 
</tr> 

而在你的控制器中:

$scope.isThisAnObject = function(input) { 
    return angular.isObject(input) ? 'IsObject' : input; 
}; 

它不僅代碼少,而且在許多其他地方也有更好的效果。過濾器是爲了一個非常特定的目的。不是這個!

+5

你能解釋爲什麼在這種情況下,功能比過濾器更好嗎?過濾器的這種「非常具體的目的」是什麼,這使得它們成爲糟糕的選擇? –

+0

是啊,請給我一個更好的解釋@TomBull – Zorgatone

+0

顧名思義,過濾器就是爲過濾而設計的。具體來說,過濾數組 - 即限制例如中繼器中顯示的項目。這是一種(可能無意識的)副作用,即語法也適用於單個項目,如接受的答案中所述。儘管在最簡單的情況下,所顯示的語法工作正常 - 它很快就會變得混亂。例如,當你想編寫多個這些操作時會發生什麼?或以其他方式處理操作結果?或者在其他情況下使用該操作? –