如何在UI-Router Resolve属性中使用Oclazyload解决的文件



我想通过使用UI-ROUTER RESOLVE属性来显示其直接范围之前要解决一个API调用,但是我的解决属性取决于OclazyLoad已解决的文件。因此,我遇到了此错误Error: [$injector:unpr] Unknown provider: SavedFactoryProvider <- SavedFactory

这是我的代码

$stateProvider.state('app.saved', {
    url: '/saved',
    templateUrl: 'app/modules/saved/views/saved.html',
    controller: 'SavedSearchCtrl',
    resolve: {
      loadFiles: ['$ocLazyLoad', function($ocLazyLoad) {
        return $ocLazyLoad.load([{
          name: 'app.saved',
          files: [
            'app/modules/saved/controller.js',
            'app/modules/saved/factory.js',
          ],
          cache: false
        }]);
      }],
      searches: ['loadFiles', 'SavedFactory', function(loadFiles, SavedFactory) {
        return SavedFactory.getSavedSearches();
      }]
    }
});

谢谢!

路由解析器与$q.all并行解析。由于 $ocLazyLoad.load(...)是异步的,因此在调用 searches时肯定不会完成。

$ocLazyLoad.load(...)返回一个可以束缚以避免种族条件的承诺,例如:

  searches: function($ocLazyLoad, $injector) {
    return $ocLazyLoad.load([
      {
        name: 'app.saved',
        files: [
          'app/modules/saved/controller.js',
          'app/modules/saved/factory.js',
        ],
        cache: false
      }
    ])
    .then(function () {
      var SavedFactory = $injector.get('SavedFactory');
      return SavedFactory.getSavedSearches();
    });
  }

与Ngroute相反,UI路由器支持层次结构;依赖关系的图正在建立在状态变化上。解决方案的顺序可以取决于其依赖性。因此,searches应将loadFiles列为其依赖性:

  searches: function(loadFiles, $injector) {
    var SavedFactory = $injector.get('SavedFactory');
    return SavedFactory.getSavedSearches();
  }

$injector.get显然是必要的,因为UI路由器如何在内部调用解析器功能。

相关内容

  • 没有找到相关文章

最新更新