#3 das ist das reine html-template ohne von angular verarbeitet worden zu sein. da ist also was bei #1 schiefgelaufen(kann die bilder unter #1 nicht sehen)
ich lade dir heute abend mal ein angular testprojekt hoch was #1 entspricht.
- - - Aktualisiert - - -
ich hab mal 4 beispiele gemacht
Anhang anzeigen angular.test.zip
das 1. ist ein standard angular-projekt mit einem modul "MyApp" unter js/app.js
der MainController ist über die direktive ng-controller direkt im index.html festgelegt
das modul legt 2 routen fest die einmal das template templates/home.html laden wenn "/" im hash der url steht und bei "/test" wird das template templates/test.html geladen für welches der controller "TestController" als zuständig erklärt wird.
geladen werden die templates in den über die ng-view direktive festgelegten bereich im index.html.
der TestController ist damit nur für seinen view zuständig wenn dieser über die url gewählt wurde, der MainController für den gesammten body
alle scripte sind hier statisch im body eingetragen
Anhang anzeigen angular.test.require.zip
im 2. beispiel werden alle scripte über require.js geladen. require.js wird in js/main.js configuriert, so dass module und path zu diesen bekannt sind.
außerdem habe ich ng-route durch den ui-router ausgetauscht(der gefällt mir besser und er kann auch subviews handlen).
in js/main.js wird dann js/app.js geladen, welches das angular-modul "testApp" enthält.
das require-module "angular" wird auch geladen und initialisiert, wobei das angular-modul "testApp" an den body gebunden wird.
dann musste ich hier noch einen Hack einbauen (der eigentlich in die require.js config gehört) damit mobile-angular-ui funktioniert. mobile-angular-ui verwendet FastClick und hat das auch in seinem js-file enthalten. im gegensatz zu mobile-angular-ui unterstützt FastClick aber require.js(einen amd-loader) und exportiert sich selbst nur noch als amd-modul wenn es über require.js geladen wird und nicht mehr als globale variable. mobile-angular-ui erwartet FastClick aber als globale variable und nicht als dependency-modul. deswegen wird hier auch FastClick geladen und als globale variable eingetragen.
js/app.js hat selbst wieder die require-module "angular, "uiRouter" und "mobileUI" als abhängigkeit angegeben, weswegen diese auch geladen werden (angular ja schon im main.js und angular hat wieder jquery als abhängigkeit in der require config angegeben)
das require-modul js/app.js implementiert das angular-modul "testApp" und legt wieder diese 2 routen fest.
zusätzlich wird eine abstrakte route erstellt welche die navigation und eine platzhalter für den eigentlichen view der beiden echten routen(der hier subview ist) enthält. der controler für die abstrakte route ist gleich inline angegeben und ist parent der beiden anderen controler.
die beiden echten routen haben eine resolve-proprety, d.h. es wird der view erst erzeugt, wenn diese aufgelöst wurde. das nutze ich hier um die controler über require.js dynamisch zu laden wenn der view angelegt werden soll, weil die entsprechende route gesetzt wurde.
hier muss jetzt aber getrickst werden. normalerweise werden controler die über angular.module().controler(...) definiert werden beim laden des moduls an einem provider registriert über einen providerInjector. der providerInjector ist aber gekapselt, so daß dieser zur laufzeit nicht mehr zugreifbar ist. in angular.module().config() blöcken ist er es aber.
deswegen werden im 1. configblock alle möglichen provider besorgt und die entsprechenden module-funktionen controler(), service(), ... werden überschrieben so dass sie auf die besorgten provider zugreifen und an diesen die controler, services, filter ... registrieren.
Anhang anzeigen angular.test.loader.require.zip
das ganze hat jetzt einen nachteil, den beispiel 3 behebt.
controler, services ... lassen sich nur noch für das eine modul welches die controler(), service(), ... funktionen überschrieben hat registrieren. hat man jetzt einen controler ... welcher geladen werden soll aus einem anderen modul oder der controler welcher geladen werden soll hat etwas aus einem anderen modul als abhängigkeit geht das ganze nicht mehr.
das löst hier das angular-modul "viewLoader" unter js/loader.js. der viewLoaderProvider hat eine funktion registerView die eine route erzeugt, den controler lädt und das template festlegt.
ob da alles geht, oder sich irgendwas nicht registrieren lässt, weil ich vom falschen injektor oder provider ausgehe musst du mal sehen. filter z.b habe ich nicht getestet. alles hier im beispiel geht aber.
dann ist die navigation hier noch in einen eigenen controler ausgelagert.
Anhang anzeigen angular.test.loader.require.internationalization.001.zipAnhang anzeigen angular.test.loader.require.internationalization.002.zipAnhang anzeigen angular.test.loader.require.internationalization.003.zip das sind 3 teile einer zip und hießen eigentlich xxx.zip.001, xxx.zip.002 und xxx.zip.003 ich kann aber nur zip hochladen, einfach wieder umbenennen und mit 7zip entpacken.
hier ist auch ein ordner namens vendor enthalten, den musst du in die 3 anderen beispiele auch kopieren
beispiel 4 demonstriert nur mal die sprach/locale unterstützung