angularjs – Angular JS:异步工厂调用问题

我是棱角分明的新手,我正在创建一个简单的应用程序.它在项目之间导航,通过JSON拉入:

http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview

我也在使用工厂,我在那里打电话,比如get或getOne,这样它就可以在一个地方处理$http,只有在数据尚未被提取时才调用它.

当你在主页上开始时这一切都正常,但是当你在一个单独的项目页面上开始时,同时调用get和getOne,同时引入重复的数据.您可以通过在其自己的窗口中打开Plunker并转到诸如/#/ projects / 1之类的URL来测试它.

我知道为什么会这样,我只是无法弄清楚如何阻止它.

有没有一个简单的解决方案或我是否完全错误的方式?

谢谢参观.

最佳答案
让你的函数通过$q而不是原始数据返回promises.然后你就可以用.then()来链接它们来实现你需要的等待:

get: function() {
    // Create a deferred object
    var deferred = $q.defer();

    // Do stuff in here
    // ...
    // and depending on the results,
    // call deferred.resolve(data) or deferred.reject(error)

    // Return the promise object
    return deferred.promise;
}

然后,在调用此函数的代码中,您可以:

MyFactory.get().then(function (data) {
    $scope.var = data;
}

这种模式在Angular中很常见,效果很好.

更新了plunkr:here.我改变了你模拟服务器请求滞后的方式,这样我就可以在$http的.success()回调中轻松解决我的延迟对象.

转载注明原文:angularjs – Angular JS:异步工厂调用问题 - 代码日志