そのため、AngularAMD、Require.js、および Angular-Route を使用して angularJS で LazyLoading を使用することを現在いじっています。html5Mode が有効になっているとエラーが発生し続けます。html5Mode がオフの場合、すべて正常に動作します。ただし、オンの場合、最初はルートが変更されて機能しますが、ページを更新すると 404 エラーが発生します。
たとえば、(html5ModeOn) にいる場合:
http://localhost/Lazy_Loading/
通常の H1 と 2 つのリンクが表示されます。リンクをクリックして 2 ページに移動すると、URL が変更され、ページが更新されます。この時点で更新すると、ページが空白になり、コンソールに次のように表示されます。
"NetworkError: 404 Not Found - http://localhost/Lazy_Loading/page2"
html5Mod をオフにして同じことを行うと (明らかに URL に /#/ のみが含まれます)、すべて正常に動作します。何か案は?
索引.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Angular Lazy Loading</title>
<base href="http://localhost/Lazy_Loading/" />
</head>
<body>
<div ng-view></div>
<script src="bower_components/requirejs/require.js" data-main="app/config.js"></script>
</body>
</html>
app/config.js
require.config({
baseUrl:'app',
paths: {
'angular': '../bower_components/angular/angular',
'angular-route': '../bower_components/angular-route/angular-route',
'angularAMD': '../bower_components/angularAMD/angularAMD'
},
shim: {
'angular': {
'exports': 'angular'
},
'angular-route': ['angular'],
'angularAMD': ['angular']
},
priority: [
'angular'
],
deps: [
'app'
]
});
app/app.js
define(['angularAMD','angular-route'], function (angularAMD) {
'use strict';
var app = angular.module('webapp', ['ngRoute']);
app.config(['$routeProvider','$locationProvider', function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider.when('/', angularAMD.route({
templateUrl: 'app/home/home.html',
controller: 'homeCtrl',
controllerUrl: 'app/home/homeController.js'
}))
// .when('/:client', angularAMD.route({ // This also doesn't work for some reason
// templateUrl: 'app/home/home.html',
// controller: 'homeCtrl',
// controllerUrl: 'app/home/homeController.js',
// accessLevel: 0
// }))
.when('/page2', angularAMD.route({
templateUrl: 'app/page2/page2.html',
controller: 'page2Ctrl',
controllerUrl: 'app/dashboard/page2Controller.js'
}))
.otherwise({redirectTo: "/"});
}]);
var appCtrl = app.controller('appCtrl', ['$rootScope','$location', function ($rootScope, $location) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
});
$rootScope.$on("$routeChangeError", function (event, next, current, rejection) {
})
$rootScope.$on("$routeChangeSuccess", function (event, next, current, success) {
})
}]);
angularAMD.bootstrap(app);
return app;
});
アプリ/ホーム/homeController.js
define(['app'], function (app) {
app.register.controller('homeCtrl',['$scope', '$routeParams', '$http', function ($scope, $routeParams, $http) {
console.log("Home Page");
}]);
});
app/page2/page2Controller.js
define(['app'], function (app) {
app.register.controller('page2Ctrl',['$scope', '$routeParams', '$http', function ($scope, $routeParams, $http) {
console.log("Home Page");
}]);
});
アプリ/ホーム/ホーム.html
<h1>Home Page</h1>
<a href="page2">Page 2</a> <br />
<a href="#page2">#Page 2</a>