2016-01-22 11 views
9

Ich habe eine AngularAMD App, und ich habe eine Direktive, die (in einem RequireJS Sinne) auf dieser App abhängt (es ist das Angular Modul, in dem diese Direktive "lebt").Wie benutze ich AngularAMD ohne Routen?

Wenn ich Routing verwende und die Direktive innerhalb einer gerouteten Ansicht verwende, dann gibt es eine Route, die eine controllerUrl enthält, die von der Datei abhängt, die die Direktive enthält.

Wenn ich es nicht tun, dann ...

Nun, es ist enragingly kreisförmig. Wenn ich der App erzähle, dass es von der Direktive abhängt, bekomme ich eine zirkuläre Abhängigkeit. Wenn nicht, kennt Angular die Direktive nicht und das Tag wird einfach ignoriert.

Gibt es keine Möglichkeit, den gesamten Controller-Auflösungsmechanismus von AngularAMD zu reproduzieren?

+0

Warum sollte die Richtlinie von der App abhängen? Ich habe RequireJS nicht benutzt, aber es scheint falsch zu sein. Vielleicht sollte App von der Richtlinie abhängen? Wenn Sie also eine App laden, wird die Anweisung damit geladen. Außerdem wäre es einfacher, das Problem zu verstehen, wenn Sie ein Codebeispiel posten, das das Problem reproduziert. –

+0

Anweisungen müssen in einem Modul sein - die App ist das Modul. – Malvolio

Antwort

3

Ich denke, dass es zwei Fälle sein:

1) Ihre Richtlinie ist Standalone und hängt nicht wirklich auf etwas in der Anwendung.

In diesem Fall, dass Sie es in eigenes Modul setzen können (sowohl in Bezug auf RequireJS und eckig):

// my-directive.js 
var module = angular.module('my-directive', []); 

module.directive('myDirective', [ 
    ... 
]); 

// app.js (depends on my-directive.js) 
var app = angular.module('myapp', ['my-directive']); 

Dieser Anwendungsfall von AngularAMD unterstützt wird, finden 3rd Party AngularJS Modules.

2) Ihre Anweisung hängt von etwas in Ihrer App ab. In diesem Fall - setzen Sie es in das gleiche Modul (auch beide in Bezug auf Winkel und RequireJS).

// app.js 
var app = angular.module('myapp', []); 

app.directive('myDirective', [ 
    ... 
]); 

3) [Update] Eine weitere Lösung: AngularAMD unterstützt auch einen speziellen Fall zu definieren, und die Last an application wide module.

+0

In jedem Fall müsste ich den gesamten Code für die Richtlinie laden, wenn ich die App geladen habe, was den Punkt der Verwendung von Require besiegen würde. – Malvolio

+0

@Malvolio meinst du, dass in beiden Fällen sowohl app.js als auch directive.js von Anfang an geladen werden? Und Sie wollen es wie "nur app.js laden und Direktive.js nur bei Bedarf laden"? –

+0

@Malvolio tatsächlich AngularAMD unterstützt das Laden von 3rd-Party-Modulen, siehe [dies] (https://github.com/marcoslin/angularAMD#3rd-party-angularjs-module), also wenn Sie Ihre Anweisung in ein separates Modul (Ansatz 1) , es sollte funktionieren. Außerdem gibt es einen speziellen Anwendungsfall in der [Dokumentation] (https://github.com/marcoslin/angularAMD#loading-application-wide-module), der genau so aussieht, wie du willst. –