为什么我的范围项不会绑定到此承诺?

时间:2014-08-29 13:50:25

标签: javascript angularjs angularjs-scope angular-promise

我有范围声明......

$scope.item = animalStore.query();

动物商店就是这样......

factories.factory('animalStore', [
    '$resource','$q', function($resource,$q) {

        var resource = $resource("animals.json");
        return resource;

    }
]);

但它工作正常......

我想使用'承诺模式'我在其他应用程序中使用它来确保我的数据没有加载两次。然而,即使数据在'然后'中恢复正常,我的绑定似乎也不起作用。呼叫。我检查了数据类型'它是一个promise /数组,所以我应该能够将我的范围绑定到它,但这可能是为什么呢?

var globalPromise = null;
factories.factory('animalStore', [
    '$resource','$q', function($resource,$q) {

        var resource = $resource("animals.json");

        var retObj = new Object();
        retObj.query = function() {

            if (!globalPromise) {
                console.log('getting data');
                globalPromise = resource.query(function () { }).$promise;
            }

            globalPromise.then(function (data) {

                return data;
            });

        }

        return retObj;

    }
]);

旁注是否有任何库可以让我在不必编写自定义代码的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

在您的工厂中,您应该从名为query的函数中返回承诺。如下图所示。

return globalPromise.then(function (data) {
    return data;
});

然后在您的控制器中,您可以将结果分配给$scope.item,如下所示。

animalStore.query().then(function (data) {
    $scope.item = data;
});

希望然后帮助。