ich grunzen bin mit meiner .js
Dateien für meine Angular App verketten.AngularJS: Datei Verkettung Umbrüche Moduldeklaration um
Ich bin gerade durchgegangen und habe die Codebasis aufgeräumt, um den Konventionen zu folgen, die here besprochen werden, spezifisch, meinen Code in kleine Module gruppierend, die Eigenschaften darstellen.
aber ich finde, dass die Reihenfolge der Verkettung erscheint die App zu brechen, wenn ein Modul verbraucht wird, bevor sie deklariert wird.
zB:
|-- src/
| |-- app/
| | |-- userProfile/
| | | | userProfile.js
| | | |-- deposits/
| | | | |-- depositFormCtrl.js
Wo:
// userProfile.js
var userProfile = angular.module('userProfile',[])
// depositFormCtrl.js
angular.module('userProfile')
.controller('DepositFormCtrl', function($scope) {...});
Wenn grunzen die Verkettung führt, erscheint depositFormCtrl.js
vor userProfile.js
. Dies bewirkt, dass die App einen Fehler werfen, beschweren:
Uncaught Error: No module: userProfile
Ich sehe eine Menge Gerede über die Möglichkeiten der Verwendung RequireJS/AMD die Ladereihenfolge der Module verwalten. Oft wird jedoch angegeben, dass dies zu viel verlangt/nicht erforderlich ist, as Angular handles this for you.
Z. B: Brian Ford des Angular Team mentioned:
My personal take is that RequireJS does too much; the only feature that AngularJS's DI system is really missing is the async loading.
Er ist auch elsewhere erklärt, dass er nicht RequireJS mit kantigem nicht empfiehlt.
Ich habe auch erwähnt, dass mit angular-loader.js gemacht, wie auf der seed project gezeigt. Wie ich jedoch verstehe (es gibt wenig offizielle Dokumentation), zielt der Loader darauf ab, das Problem zu lösen, Module nicht in der richtigen Reihenfolge zu laden, anstatt sie vor der Verwendung zu referenzieren.
Hinzufügen Winkel loader.js zu meinem Projekt nicht das Problem behoben wurde.
Gibt es eine Deklaration, die ich verwenden sollte, die die Fehler verhindert, die ich habe?
Was ist die korrekte Deklaration von Modulen & Controller, so dass die Reihenfolge der Dateien verkettet ist, hat keinen Einfluss auf den Code zur Laufzeit?
Das ist genau, warum ich mit RequireJS mit kantigem empfehlen. Mit RequireJS können Sie ganz einfach die Ladereihenfolge aller Ihrer Skripte definieren, und bei der Bereitstellung in der Produktion verwenden Sie r.js (den RequireJS-Optimierer), der Ihrer Ladeauftragsdefinitionsdatei folgen und die Dateien genau in der Reihenfolge verketten kann Sie weisen es an zu tun. Das mache ich bei meinen Projekten und es funktioniert perfekt. – Stewie
Ich weiß nicht, ob das dein Problem behebt (es hat meins). Aber ich musste zuerst app.js laden (die Datei mit der 'var app' wurde deklariert, dann konnte ich den Rest der Dateien mit' grunt-contrib-concat' versehen. – chovy