Ale*_*ton 3 asynchronous factory angularjs angular-ui-router
我是棱角分明的新手,我正在创建一个简单的应用程序.它在项目之间导航,通过JSON拉入:
http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview
我也在使用工厂,在那里我打电话,get或者getOne,这样它$http在一个地方处理,只有在数据尚未被提取的情况下才调用它.
当你在主页上开始时这一切都很好,但是当你在一个单独的项目页面上开始时,两个get并且同时getOne被调用,拉入重复的数据.您可以通过在其自己的窗口中打开Plunker并转到诸如的URL来测试/#/projects/1.
我知道为什么会这样,我只是无法弄清楚如何阻止它.
有没有一个简单的解决方案或我是否完全错误的方式?
谢谢参观.
让您的函数通过$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;
}
Run Code Online (Sandbox Code Playgroud)
然后,在调用此函数的代码中,您可以:
MyFactory.get().then(function (data) {
$scope.var = data;
}
Run Code Online (Sandbox Code Playgroud)
这种模式在Angular中很常见,效果很好.
更新了plunkr: 这里.我改变了你模拟服务器请求滞后的方式,以便我可以deferred在.success()回调中轻松解决我的对象$http.