我想在Angular项目中使用延迟加载:
这是相关的app.js代码:
var app = angular.module('eva', ['ui.router',
'controllers', 'oc.lazyLoad']);
app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', '$locationProvider', '$ocLazyLoadProvider',
function($stateProvider, $urlRouterProvider, $httpProvider, $locationProvider, $ocLazyLoadProvider) {
$httpProvider.interceptors.push('AuthInterceptor');
$urlRouterProvider.otherwise("/");
$locationProvider.hashPrefix('!');
$stateProvider.state('challenge', {
url: '/challenges',
templateUrl: 'views/Challenges.html',
controller: 'ChallengeCtrl',
onEnter: ['$state', 'auth', function($state, auth) {
if (!auth.isLoggedIn()) {
$state.go('login');
}
}],
resolve: { // Any property in resolve should return a promise and is executed before the view is loaded
loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) {
// you can lazy load files for an existing module
return $ocLazyLoad.load('js/controllers/ChallengeController.js');
}]
}
这是我的控制器定义代码:
angular.module('eva').controller('ChallengeCtrl', ['$scope', 'auth','$translate', 'challengeFactory', 'userFactory', 'userService',
function($scope, auth, $translate, challengeFactory, userFactory, userService) {
我没有在index.html文件中加载challengecontroller.js文件。
我在index.html文件中的app.js之前包含了oclazyload:
<script type="text/javascript" src="js/lib/oclazyload/dist/ocLazyLoad.js"></script>
<script type="text/javascript" src="js/app.js"></script>
我在运行应用程序时出现此错误:
Error: [ng:areq] http://errors.angularjs.org/1.4.7/ng/areq?p0=ChallengeCtrl&p1=not%20a%20function%2C%20got%20undefined
我为延迟加载尝试了很多东西,但没有一个能够工作。现在我只是按照Example
上的示例我真的很喜欢这里,而且我不知道怎样做才能让延迟加载工作。我宁愿不使用requirejs。
答案 0 :(得分:0)
angular config is just a function,在调用此配置之前,任何依赖项都应该是$ inject。您可以将其添加到<script>
标记中,然后将其添加到app = angular.module['app', ['depend1'])
所以你改变它并再试一次。
app.config(function($stateProvider, $urlRouterProvider, $httpProvider, $locationProvider, $ocLazyLoadProvider) {
顺便说一句:打开您的浏览器开发工具,检查此文件js/controllers/ChallengeController.js
是否正确加载