Angular JS:异步工厂调用问题

Angular JS: Async factory call issue

我是 angular 的新手,我正在创建一个简单的应用程序。它在项目之间导航,通过 JSON:

引入

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

我也在使用一个工厂,我在其中调用 getgetOne,以便它在一个地方处理 $http,仅在以下情况下调用它尚未获取数据。

当您在主页上启动时一切正常,但是当您在单个项目页面上启动时,getgetOne 同时被调用,提取重复数据.您可以通过在它自己的 window 中打开 Plunker 并转到 url 来测试它,例如 /#/projects/1.

我知道为什么会这样,只是不知道如何阻止它。

是否有一个简单的解决方法,或者我是否以完全错误的方式解决了这个问题?

感谢观看。

通过 $q 而非原始数据实现您的功能 return 承诺。然后你就可以用 .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() 回调中轻松解析我的 deferred 对象