2016-03-28 13 views
0

私は$window.location(url)を使って残りのAPIから直接CSVファイルをダウンロードしています。

私は約束を使用していますが、ファイルがダウンロードされていますが、私は成功メッセージを表示することができません成功メッセージを表示する必要があります。それは代替ではありません上記のコードは、あなたのdownloadcsv関数内$ q.resolveを使用しようとすると

app.factory('downloadService', function($q, $window, $timeout) { 
    return { 
    download: function(url) { 
     var defer = $q.defer(); 

     $timeout(function() { 
      $window.location.href = url; 

     }, 1000) 
      .then(function() { 
       defer.resolve('success'); 
      }, function() { 
       defer.reject('error'); 
      }); 
     return defer.promise; 
     } 
    } 
} 

function download() { 
    getcsv().then(function(response) { 
    if (response === 'success') { 
     $scope.msg = 'success'; 
    } 
    }) 
} 
getCSV() { 
    var defer = $q.defer; 
    downloadCSV(); 
    return defer.promise; 
} 

function dowloadcsv() { 
    $window.location(url); 
} 
+1

残りのコードを表示して、表示しようとしているメッセージのタイプを表示できますか? – Tim

+0

'関数ダウンロード(){ getcsv()を(関数(応答){ 場合(応答=== '成功') {$ scope.msg = '成功';}} )。 } getCSV( ){ var defer = $ q.defer; downloadCSV(); return defer.promise; } 関数dowloadcsv(){ $ window.location(url); } – Sandeep

+0

まず、あなたは約束する価値を決して与えていないので、あなたは決してヒットしません。あなたは 'defer.resolve(value);'を使うことができます。https://docs.angularjs.org/api/ng/service/$q#resolve – CShark

答えて

0

あなたが約束を返す$タイムアウトサービスを使用することができます。

+0

ありがとうございました – Sandeep

+0

しかし、$ timeoutに1000を渡すことによって、あなたはその数ミリ秒(おそらくあなたが望むidk)だけ "ダウンロード"を遅らせています。また、 '$ timeout'は、この例では常に成功を返すので、実際には何も達成しません(これは、$ timeoutの約束がhttps://docs.angularjs.org/を使用してキャンセルすると拒否されるためです) api/ng/service/$ timeout#cancel)。 – CShark