AngularJS - 如何从图像对象创建延迟对象

时间:2014-10-28 12:46:27

标签: javascript angularjs deferred

我正在尝试从简单的图像对象创建中创建一个延迟对象,如下所示:

var image = new Image();
image.src = 'some url';
image.onload = function() {
   // some code
}

现在......如何使用AngularJS中的$ q库创建延迟对象?有可能吗?

1 个答案:

答案 0 :(得分:7)

我认为有一些工厂,你计划在这里放置这个功能。然后:

.factory('utils', function($q) {
    return {
        createImage: function(src) {
            var deferred = $q.defer(),
                image = new Image();
            image.onload = function() {
                deferred.resolve(image);
            };
            image.src = src;
            return deferred.promise;
        }
    };
});

然后你会像往常一样使用它:

utils.createImage('/assets/images/big-logo.png').then(function(imgObj) {
    console.log(imgObj);
});

Angular 1.3 。由于Angular 1.3版本承诺服务$q也允许新的语法类似于本机Promise构造函数。然后可以重写上面的函数:

createImage: function(src) {
    return $q(function(resolve, reject) {
        var image = new Image();
        image.onload = function() {
            resolve(image);
        };
        image.src = src;
    });
}

您可以同时使用1.3版本。

最后简单演示http://plnkr.co/edit/MbQEDPHoAurFd6JwHTji?p=preview