我是角度新手,正在创建一个简单的应用程序。它在项目之间导航,通过 JSON 拉入:
http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview
我也在使用工厂,我在那里拨打电话,例如get
or getOne
,这样它就可以处理$http
在一处,仅在尚未获取数据时才调用它。
当您从主页开始时,这一切都可以正常工作,但是当您从单个项目页面开始时,两者都会get
and getOne
同时调用,提取重复数据。您可以通过在其自己的窗口中打开 Plunker 并转到诸如/#/projects/1
.
我知道为什么会发生这种情况,只是不知道如何阻止它。
是否有一个简单的解决方案,或者我是否以完全错误的方式进行处理?
谢谢参观。
让你的函数通过以下方式返回承诺$q
,而不是原始数据。然后你就可以将它们链接起来.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 中很常见,而且效果很好。
更新后的笨蛋: here http://plnkr.co/edit/AmplnNWPh17ZTvEZsOsN?p=preview。我改变了您模拟服务器请求延迟的方式,以便我可以轻松解决我的问题deferred
对象在.success()
的回调$http
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)