0

我已经花了几个小时尝试在线提供的所有不同方法,但没有任何效果。我只是想加载一个脚本以在所有图像加载后运行。Angular 有什么不允许我这样做的吗?我正在使用$routeProvider

var photos = {
    name: 'photos',
    url: '/photos',
    views: {
        main: {
            templateUrl: "views/photos/photos.html",
            controller: function($scope,$http){
                $http({
                    url: 'get/photos',
                    method: "POST"
                })
                    .success(function (data, status, headers, config) { 
                        $scope.data = data;
                        // this doesn't work
                        $(window).load(function() {
                            myScript();
                        });
                    })
                    .error(function (data, status, headers, config) { $scope.status = status; });
            }
        }
    }
};

顺便说一句,我在控制台中没有收到任何错误。

4

3 回答 3

0

AFAIK,Angular 没有提供在图像完成加载时通知我们的方法。您需要为此编写自己的指令。该指令将包装必要的 JavaScript/jQuery 代码,这些代码将检测一个或多个图像的完成加载条件。

图像加载时的 jQuery 回调(即使图像被缓存)https://github.com/desandro/imagesloaded可能会有所帮助。

于 2013-07-24T13:50:01.727 回答
0

我不知道我是否真的了解您要获取的数据类型,但我认为您可以尝试使用 Promise

Angular 中的 $http 已经返回一个用 .success 或 .error 包装的 Promise,但您也可以像使用其他所有 Promise 一样使用 .then() 回调

因此,如果问题是等待 success() 回调完成,您可以这样做,用几个 then() 替换它:

$http.post(...).then(
                //function which will wait for the data to be downloaded
                //here you can alter data, check some values etc...
               ).then(
               //the script for what you want after
               myScript();
               );

我做了一个小小提琴来解释:http: //jsfiddle.net/Kh2sa/2/

它使用 $timeout 模拟较长的响应时间,因此您必须等待 3 秒才能看到修改后的数据,在您调用 myScript() 函数之前,这些数据将保持初始状态

于 2013-07-24T12:31:10.687 回答
0

在我看来,http POST 调用检索了照片。我想这myScript是一个功能。那么为什么不试试这个:

var photos = {
    name: 'photos',
    url: '/photos',
    views: {
        main: {
            templateUrl: "views/photos/photos.html",
            controller: function($scope,$http){
                $http({
                    url: 'get/photos',
                    method: "POST"
                })
                .success(function (data, status, headers, config) { 
                    $scope.data = data;
                    myScript();
                })
                .error(function (data, status, headers, config) {
                    $scope.status = status;
                });
            }
        }
    }
};

因为该myScript函数仅在POST成功后运行。我假设 是data指实际的图像数据。

于 2013-07-24T03:10:49.473 回答