2016-07-19 8 views
1

Da Skript nicht in Templates geladen werden kann, weil Angulars jQLite nicht dafür geschrieben wurde, entschied ich, jQuery-Bibliothek vor Angular hinzuzufügen da es nach jQuery-Existenz und voila! sucht, funktioniert es. Aber die Tatsache, dass ich hier eine Frage stelle, bedeutet, dass es ein "Aber" gibt, also wird das Skript nicht ausgeführt, bevor der Inhalt geladen wird. Natürlich habe ich einen kleinen Trick mit Routen gemacht.angular - Anfügen und Ausführen von Skripten innerhalb von ng-view, bevor der Template-Inhalt angehängt wird

Im Modul Config Abschnitt, habe ich dies:

$routeProvider 
      .when("Business/:Context/:View?", { 
       templateUrl: function (url) { 
        return "Contexts/" + url.Context + "/" + (url.View || url.Context) + ".html"; 
       } 
      }); 

Dann lassen Sie uns sagen, dass wir die Strecke zu "#/Geschäft/Test" er am meisten suchen Sie eine Datei mit dem Namen Test.html auf „set/Kontext/Test ", richtig eh! Nehmen wir an, der Inhalt von Test.html ist dies.

<script> 
    (function(ng){  
     console.log(ng) 
     ng.module('MyApp').controller('TestController', function ($scope, $route, $routeParams, $location, $http, $mdDialog) { 
      $scope.name = "TestController"; 
      $scope.params = $routeParams; 
      $scope.name = "John"; 
     }); 
    })(angular) 
</script> 
<div ng-controller="TestController"> 
    Hola {{ name }} 
</div> 

Und schließlich die eigentliche Frage: Warum passiert das? Es ist wie die nach ausgeführt wird, oder ich weiß nicht, weil, sucht die Konsole:

Console

Angular existiert, aber der Controller nicht in der Zeit hinzugefügt wird. Mache ich falsch? Ist dieses Verhalten erlaubt? Kann mich jemand auf dieser Reise führen?

Antwort

0

Versuchen Sie, das Controller-Skript in die Ansicht einzufügen? Verstehe nicht warum und welche Logik dahinter? Sie haben die Vorlage und die Steuerung und der Grund ist, die Ansicht/DOM und die Geschäftslogik dahinter zu trennen.

In eckig, die script Tag laden der Inhalt eines Elements in $ templateCache, so dass die Vorlage durch ngInclude, ngView oder Richtlinien verwendet werden so dass es nicht das gleiche wie ein <script> Tag interpulated würde normalerweise geladen werden.

Sie behaupten auch, daß Die Typ des Elements muss als Text/ng-Vorlage angegeben werden, und einen Cache-Namen für die Vorlage muss über die ID des Elements zugeordnet werden, die dann als eine verwendet werden kann, DirectiveUrl der Direktive.

Sie verwenden also nicht das Skript-Tag, wie von eckigen beabsichtigt.

Warum nicht den Controller in eine js-Datei und laden Sie es aus dem Stamm-HTML oder mit requirejs oder eine ähnliche Bibliothek.

+0

Art von ?? !! es war nur eine Idee. Ich wollte nur eine einfache Möglichkeit zum Laden von Controller und Ansicht erstellen, auch wenn ich dachte, eine Möglichkeit zu finden, das Controller-Skript innerhalb der in $ when.resolve zu laden, ist es möglich ??. Die Antwort auf Ihre letzte Frage ist, dass ich viele Skripte in der HTML-Wurzel haben würde, weil es zu viele Controller hat, und ich würde sie gerne laden, wenn App sie braucht, nicht zum ersten Mal. –

+0

@PedroMora So schrieb ich auch, dass Sie 'requirejs' oder eine andere Bibliothek verwenden können - Überprüfen Sie [ocLazyLoad] (https://oclazyload.readme.io/) es ist genau für Ihren Fall, wenn Sie viele Controller und Sie haben (zu Recht) möchte den Controller laden, wenn Sie es brauchen. Es funktioniert gut in meiner App, also empfehle ich Ihnen, es zu versuchen –

+1

Lesen Sie diese [tutorial] (https: //oclazyload.readme.io/docs/with-your-router) zur Integration mit [ui-router] (https://github.com/angular-ui/ui-router) –

Verwandte Themen