Angular JS:异步工厂调用问题

2024-01-14

我是角度新手,正在创建一个简单的应用程序。它在项目之间导航,通过 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(使用前将#替换为@)

Angular JS:异步工厂调用问题 的相关文章

随机推荐