2013-01-12 100 views
2

我有一組記錄。該數組將根據用戶的權限顯示不同的記錄。動態更改過濾器表達式

因此,我必須根據用戶使用不同的過濾器。如何創建這樣這需要根據用戶的權限的變量函數的表達式 -

<div ng-repeat="r in records | filter:{isVisible:true}" 

上述內容已經過濾器表達式{ISVISIBLE:真}。我想根據用戶動態分配不同的過濾器表達式。所以user2將有{isCommon:'M2'}。

+4

因此,如果我更改JavaScript,我可以看到我不應該看到的記錄?換句話說,這種方法可能會有一些嚴重的安全問題嗎? –

+0

+1。我一定會在實時應用程序中進行更改。但是這是爲了原型。 – murtaza52

+6

我知道它是一箇舊帖子,但是..無論您發送給客戶端都可以看到,所以依靠過濾器來隱藏敏感數據是不明智的。 – Evgeni

回答

12

過濾器表達式可以是變量太多:

<li ng-repeat="item in items | filter:filterExpr">{{item.name}}</li> 

凡表達的範圍定義:

$scope.filterExpr = { tester: true }; 

以下是一個演示這更完全是Plunker:http://plnkr.co/edit/Au8KFg?p=preview

PS:請注意@ MarkRajcok對你的帖子的評論,因爲它是重要的是要注意。

+0

+1爲答案Josh。此外,爲什麼不工作,如果$ scope.filterEcp =「{tester:true}」,即如果過濾器表達式是一個字符串,而不是一個對象? – murtaza52

+1

@ murtaza52使用字符串表達式時,$ filter只會返回子字符串匹配。如果你做'過濾:'one''或'$ scope.filterExp ='one'',它會將數組中的對象串聯起來,看看其中是否包含「one」。你可以用'$ scope.filterExp ='true''來模擬我的答案,但它並不評估一個布爾表達式;它只是匹配子字符串。 –

2

2Terry Drozdowski - 絕對正確:過濾器對最近版本(1.1.7)的布爾值不起作用。感謝您指出這一點 - 您必須使用引號:

<div ng-repeat="r in records | filter:{isVisible:'true'}"