2013-03-01 8 views
7

Ich arbeite an der Einrichtung von Konfigurationsdateien in AngularJS. Ist es möglich, eine Fabrik in AngularJS zu erstellen, deren Schlüssel nicht überschrieben werden kann? Zum Beispiel kann ich eine Konstante wie folgt aufgebaut, die nichtAngularJS "Constant" Factory

überschrieben werden kann

module.constant (‚Tiere‘, { „Katze“: „Miau“, „Hund“: „Wuff“});

Aber ich möchte so etwas tun, die für überschrieben Werte können aber nicht die Fabrik selbst

module.value('catSound','meow') 
     .value('dogSound','woof') 
     .factory('animals', ['catSound','dogSound', function(catSound, dogSound) { 
      return { 
       "cat": catSound, 
       "dog": dogSound 
      } 
     }); 

Die obige Fabrik kann für ein anderes Stück Code überschrieben werden, so dass module.factory('animals',function(){ return 7 }) haben und alles kaputt machen. Als Fabrik können die einzelnen Werte jedoch (und sollten) überschreibbar sein, also sollte ich in der Lage sein, module.value('catSound','hiss') zuzuordnen und Sachen zu haben, die noch arbeiten, wie erwartet.

Ich habe versucht, in Konstanten zu injizieren, aber soweit ich das verstehen konnte, ist das nicht möglich. Wie kann ich verhindern, dass meine Factory-Deklaration überschrieben wird? Ich realisiere, dass Konstante ist wahrscheinlich nicht der richtige Begriff bei der Beschreibung, was ich will, aber ich möchte die Fabrik Konstante konstant sein.

+0

Können Sie einen kleinen Einblick in Ihren Anwendungsfall geben? Das Überschreiben von Fabriken bietet große Vorteile, zum Beispiel beim Testen von Tests. –

+0

Im Wesentlichen versuche ich nur eine Standardkonfigurationsdatei zu erstellen, die kopiert werden kann und ihre Parameter modifiziert werden können, um die Bedürfnisse einzelner Server zu erfüllen (dh wir wollen eine API URL, die standardmäßig auf eine Entwicklungs-API verweist, aber auf Der Produktionsserver soll auf die Produktions-API verweisen. Die Idee war, _all_ der Konfigurationswerte in einer Datei beizubehalten, um das Aktualisieren der Standardwerte zu vereinfachen, während verhindert wird, dass Entwickler die Werksausgabe in ihrer lokalen Konfiguration versehentlich ändern. 'value()' würde individuelle Änderungen erlauben. Ich bin sicher, es gibt eine bessere Methode –

+0

Haben Sie jemals eine Lösung für Ihr Problem gefunden? Ich beschäftige mich im Moment mit dem gleichen Thema. –

Antwort

2

Alles ist in Javascript veränderbar, so etwas zu tun ist schwierig und nie vollständig ausfallsicher. Ich habe mich im eckigen Code umgeschaut und keine Beweise für einen Schutzmechanismus gefunden, wie du ihn anscheinend verlangst.

Mein Rat wäre, nur mit dem Risiko zu leben. Es ist nicht wert, sich selbst zu schützen, außer mit Tests und schönen, langen Namen. Ich nehme an, Sie wurden einmal gebissen, aber ich denke, die Chancen sind ziemlich gering, es sei denn, Sie definieren Fabriken mit sehr kurzen Namen.

+2

Zugegeben, aber Dinge wie 'Object.seal()' und Setter können einen gewissen Schutz bieten. 'module.constant()' verhindert, dass Elemente mehrfach mit derselben Methode überschrieben werden, also hatte ich gehofft, dass etwas Ähnliches bereits für 'module.factory()' -Definitionen vorhanden ist. –

+0

@IanHunter ja, einverstanden. Ich glaube aber, dass es momentan noch nichts gibt, also musst du es entweder selbst machen oder ohne ... – iwein

Verwandte Themen