在我的html中,我有{{i.userId |用户名 }} 。基本上我试图将其转换为名称。我正在使用过滤器来执行此操作,但我在使用异步函数时遇到了很多问题以获取数据。
app.filter('userName', function($http) {
return function(value) {
if (!value) return '';
var user;
$http({
method: 'GET',
url: 'http://localhost:3000/api/Users?filter=
{"where":{"id":' + value + '}}'
}).success(function(response) {
user = response;
});
return user.name;
}
});
我试图将其置于回调格式中,但我无法让它发挥作用。
答案 0 :(得分:0)
在过滤器中使用异步调用将不起作用,因为Angular假定您的过滤器是无副作用的,并且仅在模型更改时执行它们。在异步调用返回之前,过滤器已完成其工作,并且将来不会被调用,直到模型更新。
您的选择是通过在过滤器函数上定义$stateful
属性来使过滤器具有状态:
function filterFunction(value) {
if (!value) return '';
var user;
$http({
method: 'GET',
url: 'http://localhost:3000/api/Users?filter=
{"where":{"id":' + value + '}}'
}).success(function (response) {
user = response;
});
return user.name;
}
filterFunction.$stateful = true;
return filterFunction;
如上所述使过滤器具有状态,Angular将在每个摘要周期对此进行评估。所以这根本不具备表现力。
请参阅过滤器上的developer guide
更好的方法是一次性获取用户列表,然后通过实现自定义过滤器来搜索此列表,该过滤器也将此列表作为输入。