2016-08-03 12 views
2

Ich entwickle eine modulare winkelförmige Anwendung mit Ich definiert I Ordnerpfad (Konstante: BASE_PATH: "Pfad/zu/Ordner") in angular-Modul-1-Modul. Ich möchte diese Konstante in einer Winkelkomponente in einem anderen Modul (angular-module-2) meiner Anwendung wiederverwenden. Ich möchte diese Konstante viele Male in meinem Projekt verwenden.Angular Komponente relativ templateUrl

module.component("relationshipSearch", { 
templateUrl: BASE_PATH +'/link/to/other/folder', 

Hexe ist der beste Weg, um diese Konstante als globale Variable sichtbar in alle Lösungsprojekt definieren Hier meine Projektstruktur ist:

project 
|-- angular-module-1 
| |-- angular-module-1.js 
| |-- angular-module-1.html 
|-- angular-module-2 
| |-- angular-module-2.js 
| |-- angular-module-2.html 

Antwort

3

würde ich sagen, dass ein gemeinsames Modul als angular-common Namen erstellen, in dem Sie common Sachen wie gemeinsamen service platzieren können, factory, directive, constants usw.

dann die Konstante hinzufügen innen angular-common (dies wäre völlig unabhängig und steckbares) Modul. wie unten

//assuming `angular-common` is already defined 
angular.module('angular-common').constant('commmonSetting', { 
    'BASE_PATH': '/link/to/other/folder' 
}) 

Als nächstes dieses gemeinsame Modul in app injizieren (das Hauptmodul ist, geht in ng-app/bootstrap verwendet werden) wie unten

angular.module('app', ['angular-common', 'ngRoute', ...other dependencies..]) 

Wenn Sie BASE_PATH nur injizieren commmonSetting verwenden wollte Abhängigkeit in controller/component wo immer Sie wollen.

app.component('myComponent', { 
    templateUrl: function(commmonSetting){ 
    return commmonSetting.BASE_PATH +'/link/to/other/folder'; 
    }, 
    .... 
}) 
+0

Danke das, was ich brauche :) – Saad

-1

Vielleicht ein anderer Ansatz helfen könnte. Anstatt den Pfad festzulegen, suchen Sie nicht nur nach einer Datei im selben Verzeichnis.

Sie könnten require() verwenden, zum Beispiel:

template: require('./template-in-same-dir.html') 

Notiere die template nicht templateUrl.

+0

ich über die beste Art und Weise bin zu fragen. – Saad

+0

Und noch der Titel fragt nach einer Vorlage URL – zilj

+0

Ich denke immer noch meine Lösung für Ihr spezifisches Problem ist eine Überlegung wert. Indem Sie mehrere Module erstellen, haben Sie diese für eine Zeichenfolge miteinander verbunden. Scheint Overkill. Aber natürlich gibt es viele Möglichkeiten einen Kuchen zu backen, es hängt nur davon ab, welcher unser Lieblingsgeschmack ist! :) – zilj

2

Sorry, für mit einer akzeptierten Antwort auf einen alten Thread posten, aber ich wollte sagen, dass die akzeptierte Antwort nicht sicher ist Verkleinerungs. Die Verkleinerungs sichere Art und Weise zu schreiben ist: zu teilen/Weiterverwendung Konstante zwischen dem anderen Modul des Winkel Anwendung

app.component('myComponent', { 
    templateUrl: function($injector){ 
    var commmonSetting = $injector.get('namespace.CommmonSetting'); 
    return commmonSetting.BASE_PATH +'/link/to/other/folder'; 
    }, 
    .... 
}); 
Verwandte Themen