2013-12-16 3 views
24

Ich versuche, eine Richtlinie auf eine andere Datei zu trennen, ohne ein neues Modul zu erklären, die - nicht tun:AngularJS - Trennung Richtlinie Dateien, aber auf dem gleichen Modul bleiben

angular.module('myapp.newmodule',[]).directive 

aber nur:

angular.module (‚myapp.directives‘). Richtlinie (‚‘

das myapp.directives Modul in einer anderen Datei vorhanden ist und funktioniert gut. aber wenn ich versuche, es in einer anderen Datei zu verwenden, wie oben gezeigt (ohne []) es schlägt fehl

folgende this answer Es glauben sollte mein Ansatz arbeiten, aber aus irgendeinem Grund versagt ..

Antwort

21

Wenn Sie zuerst ein Modul deklarieren, muss es das Abhängigkeitsargument haben. Danach können Sie dasselbe Modul referenzieren, indem Sie nur das Argument des Modulnamens verwenden.

/* create module */ 
angular.module('myapp.newmodule',['ngRoute','ngResource']); 

/* declare components of same module, note same name*/ 
angular.module('myapp.newmodule').directive.... 

Wenn Sie neue Module erstellen möchten, müssen Sie sie im Haupt ng-app Modul als Abhängigkeiten injizieren.

+0

hmmm, das ist genau das, was nicht funktioniert .. Ich mache '' 'angular.module ('myapp.newmodule'). Richtlinie' '' und es scheitert mit Injektionsfehler während in einem anderen Filer '' 'angular.module (' myapp.newmodule', []). directive '' 'bereits funktioniert. erklärt, etc .. – alonisser

+3

also laden Sie Dateien in falscher Reihenfolge? – charlietfl

+0

auf Punkt! das war das Problem, danke @charliefl – alonisser

5

Sie müssen nicht um sie zusammen Kette, der Link hat am unteren Rand der Frage um die Antwort geschrieben.

In der ersten Datei, die Sie benötigen, um Ihre App-Modul zu erstellen:

var myApp = angular.module('myApp ', []); 

Dann in jeder Datei, die Sie zusätzliche Dinge zu myApp anhängen können:

myApp.directive('ngValidate', ['$parse', function ($parse) { 
    .... 
}]); 

Ich persönlich Kette nie dieses Zeug zusammen, vielmehr habe ich es in separate Dateien gelegt.

11

Wo immer es sich bezieht, beziehen Sie sich nur auf den Modulnamen (auch in verschiedenen Dateien) und fügen Sie die Direktiven an. Javascript wird nur sehen, was an das Modul angehängt ist und nicht sehen, aus welcher Datei es stammt.

file1.js

angular.module('module-name') 
    .directive('directive1', function() { 
     return { 
      .... 
     }; 
    }); 

file2.js

angular.module('module-name') 
    .directive('directive2', function() { 
     return { 
      .... 
     }; 
    }); 

einzige Sache ist, vergessen Sie nicht, sowohl die js Dateien in der Ansicht HTML-Datei aufzunehmen. sagen index.html

<script src="file1.js"></script> 
<script src="file2.js"></script> 
+3

Das funktioniert! Aber passen Sie auf, Klammern für Abhängigkeiten nur in einer Datei zu verwenden (die Hauptapp-Datei) file1: angular.module ('Modulname', []) ... file2: angular.module ('Modulname ') ... sonst funktioniert es nicht. – Ruwen

Verwandte Themen