Javascript 如何让此筛选器从$http或$resource返回值

Javascript 如何让此筛选器从$http或$resource返回值,javascript,angularjs,Javascript,Angularjs,在我的html中有类似{i.userId | userName}的内容。基本上我是想把它转换成一个名字。我正在使用一个过滤器来完成这项工作,但是我在使用异步函数获取数据时遇到了很多问题 app.filter('userName', function($http) { return function(value) { if (!value) return '';

在我的html中有类似{i.userId | userName}的内容。基本上我是想把它转换成一个名字。我正在使用一个过滤器来完成这项工作,但是我在使用异步函数获取数据时遇到了很多问题

                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;

                     }
                 });

我尝试将其设置为回调格式,但无法使其正常工作。

使用异步调用过滤器将无法正常工作,因为假定您的过滤器没有副作用,并且仅在模型更改时执行。在异步调用返回之前,过滤器已经完成了它的工作,并且在模型更新之前不会被调用

您的选项是通过在过滤器函数上定义
$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将在每个摘要周期中对此进行评估。所以这根本就没有表现

请参阅过滤器上的说明


更好的方法是一次获取用户列表,然后通过实现一个将此列表作为输入的自定义筛选器来搜索此列表。

使用ajax进行筛选器…这会造成混乱。您知道它会在每个摘要中被调用吗。。