我有这段代码
$http({
method: 'GET',
url: url,
params: params,
timeout: timeout || deferred.promise
})
在params
我有一个$filter
属性。在我过滤的数据集中,我有一个名为foo
的小数属性。如果我将$filter
设置为
"foo eq 100"
我得到了正确的结果:foo等于100的所有结果。
如果我将$filter
设置为
"foo eq 100.5"
我收到错误。消息是
"The query specified in the URI is not valid. A binary operator with incompatible types was detected. Found operand types 'Edm.Decimal' and 'Edm.Double' for operator kind 'Equal'"
如何进行十进制过滤?
答案 0 :(得分:2)
此问题与JavaScript或AngularJS无关。
您正在查询OData服务,其中foo
似乎是Edm.Decimal
值,但您尝试将其与100.5
进行比较,Edm.Double
字面值。 eq
运算符不支持将Edm.Decimal
与Edm.Double
进行比较。
要解决此问题,请使用Edm.Decimal
字面值:
"foo eq 100.5M"
答案 1 :(得分:1)
我从来没有见过$filter
来自$http
电话的参与,所以我不太关注你正在做的事情。但是,如果您只想过滤结果,可以通过内置filter
$filter
ng-repeat
(Angular Docs)进行严格比较
请查看此Plunker,了解如何在模板中过滤<h2>Filter</h2>
Value: <input type="number" ng-model="value">
<hr/>
<h2>Items</h2>
<div ng-repeat="item in items | filter:value:true">
{{item.value}}
</div>
表达式的示例:Plunker Example
代码:
{{1}}