Sehr neu zu AngularJS, ich rate den Begriff für das, was ich versuche zu tun ist Lazy Load. Ich habe mir verschiedene Blogs angeschaut und keine vollständige Arbeitslösung gefunden, die ausschließlich AngularJS verwendet.Angular JS: So laden Sie JS-Dateien in Partials
Ich verstehe, dass, wenn ich die <script src="js/process1.js"></script>
in index.html setzen, alles funktioniert gut, ich versuche, auf die Menge von js zu reduzieren, die auf die anfängliche Last heruntergezogen wird.
Mit dem Skript-Tag in der partiellen sitzt, ist es nie geladen, so dass die P1Ctrl nie erstellt wird. Wenn also ein Benutzer in die Anwendung einsteigt und nie zu process55 geht, hat der Benutzer noch immer den Code für process55, obwohl er nie verwendet wurde.
Gibt es eine Möglichkeit, die Datei zu laden und die in process1.js erstellten Objekte in die App einzufügen, die in main definiert ist, zu der Zeit, zu der process1 route ausgeführt wird?
index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Large Angular App</title>
<link rel="stylesheet" href="lib/foundation/css/foundation.min.css" />
</head>
<body ng-app="largeApp" ng-controller="LargeAppController">
<div>
<a href="#/home">Home</a> | <a href="#/process1">Process1</a>
</div>
<br/>
<br/>
<br/>
<ng-view>Test</ng-view>
<script type="text/javascript" src="lib/jquery/jquery.min.js"></script>
<script type="text/javascript" src="lib/angular/angular.js"></script>
<script type="text/javascript" src="lib/angular/angular-route.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>
js/main.js:
var app = angular.module("largeApp", ['ngRoute']);
var appCtrl = app.controller("LargeAppController", function(){});
app.config(function ($routeProvider, $controllerProvider) {
// save references to the providers
app.registerCtrl = $controllerProvider.register,
$routeProvider.when('/', {templateUrl: 'partials/home.html'});
//Thinking I need to set up a resolve to fire off a script loader to load js.
$routeProvider.when('/process1', {templateUrl: 'partials/process1/process1.html'});
$routeProvider.otherwise({redirectTo: '/'});
});
partials/home.html:
<div>
Home Page
</div>
partials/process1.html:
<script type="text/javascript" src="js/process1/Process1Controller.js"></script>
Process 1 {{process1data}}
js/process1.js:
console.log("I made it here");
app.registerCtrl('Process1Controller',function($scope){
$scope.process1data = "Hello!";
}
]);
Setzen Sie all dies zusammen und es bricht nicht, aber es funktioniert auch nicht. Versucht mit und ohne die JQuery-Referenz. Die Seite wird ohne Fehler angezeigt, aber die js wird nie aufgerufen und Daten werden vom Controller in die Ansicht geschrieben. Ein Blick auf diese IFY-Site, die Sie erwähnt haben, scheint darauf hinzuweisen, dass ich einen Script-Loader brauche und Versprechungen verwende. Ich weiß, dass ich in der Nähe bin ... aber noch nicht ganz da. – John
Ich habe gerade festgestellt, dass dieser Trick mit jQuery nicht mit Angular 1.2 funktioniert. – lort
Das hat den Trick auf 1.1.5 geschaltet. – John