2015-07-20 82 views
0

我试图使用ui路由器与lazyload,从铬我可以看到所需的js被加载,但角引发错误。oc.lazyload不与UI路由器,js加载,但控制器未初始化

从错误中我可以告诉控制器将不会被初始化,连接路由器代码:

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

app.config(function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/pages/dashboard'); 

    $stateProvider.state('index', { 
    url: '/pages/:name', 
    templateUrl: function($stateParams) { 
     return 'templates/' + $stateParams.name + '.html'; 
    }, 
    controllerProvider: function($stateParams) { 
     return $stateParams.name; 
    }, 
    resolve: { 
     loader: ['$ocLazyLoad', '$stateParams', function($ocLazyLoad, $stateParams) { 
     var url = 'templates/controllers/' + $stateParams.name + '.js'; 
     console.log(url); 

     return $ocLazyLoad.load({ 
      name: 'aaaaa', 
      files: [url] 
     }); 
     }] 
    } 
    }); 
}); 

我缺少的东西?

回答

0

我会重构你resolve.loader功能,例如:

loader: ['$ocLazyLoad', '$stateParams', function($ocLazyLoad, $stateParams) { 
    var url = 'templates/controllers/' + $stateParams.name + '.js'; 

    return $ocLazyLoad.load(url).then(function() { 
    return $stateParams.name; 
    }); 
}] 

现在,当ocLazyLoad已成功加载控制器代码,我们回到你的控制器的(我假设它的实际名称匹配$stateParams.name,因为这是你在controllerProvider中引用它的方式)。

然后在controllerProvider

controllerProvider: function (loader) { 
    return loader; 
} 

controllerProvider时下接受解析的值,而不仅仅是stateParams - 按照以下承诺:ui-router#851f8e46

这是在0.2.14中引入的,此后一直是changed again,它现在也支持templateUrl函数中的resolved值。

所以顺便说一句,你可以通过loaded到您的templateUrl功能,而不是`$ stateParams.name如果升级到0.2.15。一个统治他们的价值?


对于它的赫克,我会在你controllerProvider函数的顶部放debugger声明事先视察$stateParams.name并确保它是相同的$stateParams.nameresolve.loader函数内。 对于它的。


而且,它可以证明非常有益的,看看错误抛出,开发者控制台输出以及控制器/模块的实现细节。

0

问题已解决。

在单独的控制器文件,你可以不写这个,

app.controller ('xxx', [ ... ]); 

相反,使用

angular.module('xxxx').controller ('xxx', [ ... ]) 

我不知道为什么还没有,但它的工作。