2

我在函数中有一个$routeChangeSuccess事件。run我喜欢加载一些东西而$http不是改变$template. 问题是这$http是异步的。我试图在事件中返回一个承诺。没有成功。是否有可能或者我是否需要直接使用 jquery 来加载我的资源而无需$http.

app.run(["$rootScope", "$http", "$location", "$q", "localize", function($rootScope, $http, $location, $q) {
    $rootScope.$on("$routeChangeSuccess", function(event, current, previous) {
        var promise = $q.defer();
        //load something and resolve promise when everything is ready
        return promise;
    });
}
]);
4

2 回答 2

3

$q.defer 方法不返回承诺。它返回一个延迟对象。您需要返回 deferred.promise 以返回承诺。

将您的代码更改为

    var deferred = $q.defer();
    // load something and resolve promise when everything is ready
    // resolve it using deferred.resolve('foo');
    return deferred.promise;

阅读文档http://docs.angularjs.org/api/ng .$q

于 2013-09-18T18:35:22.710 回答
0
$rootScope.$on("$routeChangeSuccess", function(event, current, previous) {
    return $http.get(some_url)
        .success(function(data){
            // do something with the data
            return myChangedData;
        })
        .error(function(data){
            // do something on error, $broadcast?
            return myError;
        });
});
于 2013-09-18T17:29:23.823 回答