angular.js - ocLazyLoad配合ui-router延迟加载controller,controller提示 not a

【字号: 日期:2022-12-26浏览:25作者:雯心

问题描述

问题如题。延迟加载进controller文件后,controller提示不存在。

贴代码:

state:

//state$stateProvider.state(’user.performance’, {url: ’/performances’,views: { ’’: {controller: ’PerformanceCtrl’,templateUrl: ’tpl/user/performance’ }},resolve:{ loadPerformanceCtrl: ['$ocLazyLoad', function ($ocLazyLoad) { return $ocLazyLoad.load(’/app/performance/performance.js’);//js文件有成功加载进来 }]} })

performance.js

;(function () { ’use strict’; myApp.controller(’PerformanceCtrl’, [ ’$scope’, ’PerformanceService’, function ($scope, PerformanceService) {console.log(’PerformanceCtrl’);//...]) })();// myApp 在此前加载的js中已经定义过。var myApp = angular.module(’zwb’, []);

报错: Argument ’PerformanceCtrl’ is not a

问题解答

回答1:

我捣鼓了下,发现:

当我创建一个新的module时,$ocLazyLoad.load()加载进来的component registered成功,如下

angular.module(’testtest’, []).controller(’PerformanceCtrl’, [ //...])

由上边,我想到angular的另一个点,当module不带参时是getter,所以尝试如下:

angular.module(’order’).controller(’PerformanceCtrl’, [ //...])

ocLazyLoad debug 提示ocLazyLoad.moduleReloaded order,这样perfomance下的component被load进来,register也成功。

纠结了蛮久,对angular的理解以及引入组件的熟悉度还很不够。感谢 G_Koala_C 的回答,thank you~

回答2:

路由的resolve一般是预加载当前state用到的数据,数据加载完了之后再去加载页面。你这个状况,没有必要懒加载呀,完全是画蛇添足吗。搞不清楚你这个错误在哪里,大概两种:1,去掉懒加载,没什么用。2,将views中的controller改成loadPerformanceCtrl,resolve已经直接重命名了。不确定好不好使。

相关文章: