8

我正在使用 Angular js 来显示加载屏幕。它适用于除 REST 服务之外的所有 REST 服务调用来下载文件。我理解为什么它不起作用,因为下载时我没有使用 $resource 进行任何服务调用;而不是我使用正常的方法来下载文件,因此 Angular js 代码对启动/完成服务请求没有任何控制。我尝试使用 $resource 来访问此 REST 服务,但是我正在从该服务获取数据,在这种情况下,加载屏幕工作正常,但不确定如何使用此数据显示给用户以有角度的下载。以下是必需的详细信息。请帮忙。

方法 1 使用 iframe 方法:

 /*Download file */
            scope.downloadFile = function (fileId) {
                //Show loading screen. (Somehow it is not working)
                scope.loadingProjectFiles=true;
                var fileDownloadURL = "/api/files/" + fileId + "/download";
                downloadURL(fileDownloadURL);
              //Hide loading screen
                scope.loadingProjectFiles=false;
            };

            var $idown;  // Keep it outside of the function, so it's initialized once.
            var downloadURL = function (url) {
                if ($idown) {
                    $idown.attr('src', url);
                } else {
                    $idown = $('<iframe>', { id: 'idown', src: url }).hide().appendTo('body');
                }
            };

使用 $resource 的方法 2(不确定如何在屏幕上显示数据以进行下载)

/*Download file */
            scope.downloadFile = function (fileId) {
                //Show loading screen (Here loading screen works).  
                scope.loadingProjectFiles=true;                 
                  //File download object
                    var fileDownloadObj = new DownloadFile();
                 //Make server call to create new File
                    fileDownloadObj.$get({ fileid: fileid }, function (response) {
                        //Q? How to use the response data to display on UI as download popup
                        //Hide loading screen
                        scope.loadingProjectFiles=false;
                    });

            };
4

2 回答 2

1

这是 $resource 服务的正确模式:

scope.downloadFile = function (fileId) {
    //Show loading screen (Here loading screen works).  
    scope.loadingProjectFiles=true;                 
    var FileResource = $resource('/api/files/:idParam', {idParam:'@id'});
    //Make server call to retrieve a file
    var yourFile = FileResource.$get({ id: fileId }, function () {
        //Now (inside this callback) the response data is loaded inside the yourFile variable
        //I know it's an ugly pattern but that's what $resource is about...
        DoSomethingWithYourFile(yourFile);
        //Hide loading screen
        scope.loadingProjectFiles=false;
    });
 };

我同意你的观点,这是一种奇怪的模式,与其他 API 不同,在这些 API 中,下载的数据被分配给回调函数中的参数,因此你会感到困惑。

注意参数的名称和大小写,看这里涉及到两个映射,一个是 $resource 对象的调用者和对象本身之间的映射,另一个是这个对象和它构建的用于下载的 url 之间的映射实际数据。

于 2015-11-16T08:33:18.813 回答
0

以下是第二种方法的一些想法,您可以在下载完成后向用户显示链接:

于 2013-11-27T13:36:34.153 回答