2017-06-22 16 views
1

ocLazyLoadingでリソースの読み込みエラーを処理する方法を知りたいのですが。私は$stateProviderの解決部分にいくつかのリソースをロードしようとしています。ロードできるファイルはctrl.jsです。別のファイルiam-not-there.jsがロードしようとしていますが、このリソースは存在しません。ocLazyLoadで404リソースが見つかりませんでした。

ここでは、この「読み込み中」エラー(リソースの読み込みにエラーがあり、リソースの読み込みエラーを処理/ catchするなどの処理を行っても解決の手続きを進めます)を処理したいと考えています。すべてのリソースがロード可能な場合は、正常に動作します。 1つのリソースをロードできなくなると、アプリケーションは解決状態に移行しません。この問題を再現するにはplnkr exampleです。

var myApp = angular.module("myApp", ['ui.router', 'oc.lazyLoad']); 

myApp.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
     .state('login', { 
      url: '/', 
      templateUrl: 'template.html', 
      controller: 'LoginController', 
      resolve: { 
       deps: ['$ocLazyLoad', function($ocLazyLoad) { 
        return $ocLazyLoad.load({ 
         name: "myApp", 
         files: [ 
         'ctrl.js', 
         'iam-not-there.js' 
         ] 
        }); 
       }] 
      } 
     }); 

    $urlRouterProvider.otherwise('/'); 
}); 
+0

を私はあなたがエラーをキャッチする約束を使用することができると思います。これを確認してくださいhttps://github.com/ocombe/ocLazyLoad/issues/164 –

+0

@ sachilaranawakaありがとう私はすでにこれを試してみました。リソースがロードできなかった場合、約束は実行されません。 – lin

答えて

1

エラーは約束から逃れることができますが、ロードはさらに進まないでしょう。依存関係の約束事のリストがすべて処理され、依存関係の1つが失敗すると、結果として得られる約束からエラーが検出されても、ロードプロセスは回復しません。

一般に、依存関係のロードにファイルが必要な場合は、オプションと見なすことができないため、望ましい動作です。ファイルが実際にはオプションと見なされた場合

、これは明示的に処理することができます

deps: ($ocLazyLoad, $q) => { 
    return $q.all([ 
    $ocLazyLoad.load('iam-not-there.js').catch(err => {}), 
    $ocLazyLoad.load({ 
     name: "myApp", 
     files: ['ctrl.js'] 
    }) 
    ]) 
} 
関連する問題