2017-05-24 87 views
5

我使用角1.6为我的项目和angular-ui路由与PugJs为HTML模板路由。 我想在我的应用程序中实现Lazyload,但不知何故,它不工作可能是由于玉。 代码:控制器是在DOM中加载,但视图没有加载,并找不到控制器oclazyload与玉(pugjs)

var app = angular.module('myApp',['ui.router','oc.lazyLoad']); 
app.config(['$ocLazyLoadProvider', function($ocLazyLoadProvider 
{ 
    $ocLazyLoadProvider.config({ 
    debug: true, 
    modules: [{ 
    name: 'js', 
    files: ['js/*'] 
}] 
}); 
}]); 

.state("exampleState", { 
     url: '/example', 
     templateUrl: '/example', 
     controller:'exampleCtrl', 

     resolve: { 
      deps: ['$ocLazyLoad', function($ocLazyLoad) { 
       return $ocLazyLoad.load({ 
        files: ['/js/exampleCtrl.js'] 
       }) 
      }] 
     } 
    }) 

控制器:

app.controller('exampleCtrl',function($scope){ 
    console.log('controller loaded'); 
}); 

和我使用的节点将这些玉石到HTML转换前端,所以当“templateUrl”是由路由服务访问会被重定向到该代码:

app.get('/example', function(req, res) { 
    res.render('/example'); 
}); 

这会在视图中加载example.jade。 我在控制台中得到这个

[$ controller:ctrlreg]名称为'exampleCtrl'的控制器未注册。

即使控制器文件在DOM中加载并且视图也没有呈现。任何有关问题的帮助欢迎。谢谢

+0

能否请您创建StackSnippet/Plnkr /的jsfiddle用最少的代码来重现问题。 – Tushar

+0

当然@Tushar会在一段时间内更新! –

+0

很难从提供的代码中分辨出来,但请确保您的决心正在兑现承诺。也许看到它是否呈现,如果你完全删除解决方案。 – frikkievb

回答

4

经过太多的搜索和尝试我找到了解决方案,问题是在构建控制器时模块的全局变量。除了使用

app.controller('exampleCtrl',function($scope){ 
    console.log('controller loaded'); 
}); 

我用angular.module('myApp').controller(,,,);

参考:ocLazyLoad Issues

1

我认为你应该做一点点不同。试试这个:

$stateProvider.state('exampleState', { 
    url: "/example", 
    views: { 
    "exampleLazyLoadView": { 
     controller: 'exampleCtrl', 
     templateUrl: '/example.html' 
    } 
    }, 
    resolve: { // Any property in resolve should return a promise and is executed before the view is loaded 
    loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) { 
      return $ocLazyLoad.load('/js/exampleCtrl.js'); 
    }] 
    } 
}); 
+0

已经尝试过! –

+2

提供此作品的所有代码烧烤。我认为你在其他地方有问题(双重检查路径)。我不确定'files:['js/*']'是否是有效的声明。 –

相关问题