繁体   English   中英

有承诺的角度过滤器服务

[英]Angular filter service with promise

我有以下过滤器:

    app.filter("findDivision", function(divisionService) {

    var isWaiting = false;
    var returnValue = null;

    function myFilter(input) {

        var translationValue = "Loading...";
        if(returnValue)
        {
            translationValue = returnValue;
        } else {
            if(isWaiting === false) {
                isWaiting = true;
                divisionService.getDivisionById(input).then(function(data) {
                    console.log("GetTranslation done");
                    returnValue = data[0].name;
                    isWaiting = false;
                });
            }
        }

        return translationValue;
    }

    return myFilter;
});

我在divisionService调用的函数如下所示:

 getDivisionById: function (id) {
    var d = $q.defer();
    $http({
        url: api.getUrl2('division'),
        method: "GET",
        params: {filters: {id: {EQUAL: id}}}
    }).success(function (data, status, headers, config) {
        d.resolve(data);
    }).error(function (data, status, headers, config) {
        api.handleError(data);
        console.log(data);
        d.reject(data);
    });
    return d.promise
}

可悲的是,它的输出如下所示:

在此处输入图片说明

谁能告诉我为什么会这样? 以及如何获得正确的值?

在第一次调用过滤器时,promise 可能还没有解决,因为 HTTP 调用需要一段时间才能完成。 你的过滤器代码会立即跳转到 return 语句return translationValue; . 在这种情况下,过滤器返回“正在加载...”。

不幸的是,过滤器在下一个摘要循环之前不会自动重新评估过滤器。 Angular 无法知道它应该执行另一个消化循环,因为没有任何变化(没有用户交互或对 $scope 的更改)。 作为实验,尝试通过更改模型来手动触发摘要循环,例如通过使用带有ng-modelinput框。 那时,您将看到过滤器将重新评估并显示输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM