2015-07-20 36 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', [ ... ]) 

我不知道爲什麼還沒有,但它的工作。

相關問題