我是角色的新手,我正在创建一个简单的应用程序。它在项目之间导航,通过JSON拉入:
http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview
我也在使用工厂,我拨打get
或getOne
等电话,以便在一个地方处理$http
,只在数据中调用它尚未取得。
当您在主页上启动时,这一切都正常,但是当您在单个项目页面上启动时,同时调用get
和getOne
,同时引入重复数据。您可以通过在其自己的窗口中打开Plunker并转到/#/projects/1
等网址来测试。
我知道为什么会发生这种情况,我无法弄清楚如何阻止它。
对此有一个简单的解决方法,还是以完全错误的方式解决它?
谢谢你看看。
答案 0 :(得分:5)
让您的函数通过$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。我改变了模拟服务器请求延迟的方式,这样我就可以轻松解决deferred
.success()
回调中的$http
对象。