2013-03-01 12 views
7

Sto lavorando alla configurazione dei file di configurazione in AngularJS. È possibile creare una fabbrica in AngularJS la cui chiave non può essere sovrascritta? Ad esempio, posso impostare una costante come questo, che non possono essere sovrascrittiFabbrica "costante" AngularJS

module.constant ('animali', { "cat": "meow", "cane": "Woof"});

Ma mi piacerebbe fare qualcosa di simile che permette sovrascritti valori ma non la fabbrica stessa

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

È possibile che questo stabilimento può essere sovrascritta consentendo un altro pezzo di codice per avere module.factory('animals',function(){ return 7 }) e rompere tutto. Tuttavia, in fabbrica, i singoli valori possono essere (e dovrebbero) essere sovrascrivibili, quindi dovrei essere in grado di assegnare module.value('catSound','hiss') e le cose funzionano ancora come previsto.

Ho provato a iniettare in costanti, ma per quanto ho potuto capire non è possibile. Come posso evitare che la mia dichiarazione di fabbrica venga sovrascritta? Mi rendo conto che la costante probabilmente non è il termine corretto quando si descrive ciò che voglio, ma voglio che la funzione della factory sia costante.

+0

Potete fornire un piccolo spaccato del vostro caso d'uso? La sovrascrittura delle fabbriche offre grandi vantaggi, ad esempio nel prendere in giro i test. –

+0

In sostanza sto solo provando a impostare un file di configurazione predefinito che può essere copiato e modificato con i suoi parametri per soddisfare le esigenze dei singoli server (ad esempio, vorremmo un URL API che punta a un'API di sviluppo per impostazione predefinita, ma su il server di produzione lo vorremmo indicando l'API di produzione). L'idea era di mantenere tutti i valori di configurazione in un file per rendere semplice l'aggiornamento dei valori predefiniti, evitando allo stesso tempo che gli sviluppatori alterassero accidentalmente l'output di fabbrica nella loro configurazione locale. 'value()' consentirebbe le modifiche individuali. Sono sicuro che c'è un metodo migliore –

+0

Hai mai trovato una soluzione al tuo problema? Sto affrontando lo stesso problema al momento. –

risposta

2

Tutto è mutabile in javascript, quindi impostare qualcosa di simile è complicato e mai completamente sicuro. Mi sono guardato attorno nel codice angolare e non ho trovato prove di alcun tentativo di un meccanismo di protezione come sembra che tu stia chiedendo.

Il mio consiglio sarebbe quello di vivere con il rischio. Non vale la pena cercare di proteggersi se non con test e bei nomi lunghi. Presumo che sei stato morso una volta, ma penso che le possibilità siano piuttosto basse, a meno che tu non definisca le fabbriche con nomi molto brevi.

+2

Concesso, ma cose come 'Object.seal()' e setter possono fornire un grado di protezione. 'module.constant()' impedisce che gli elementi vengano sovrascritti usando lo stesso metodo più di una volta, quindi speravo che qualcosa di simile fosse già in uso per le definizioni di 'module.factory()'. –

+0

@IanHunter si, d'accordo. Non penso che ci sia qualcosa in questo momento, quindi devi farlo tu stesso o vivere senza ... – iwein

Problemi correlati