2013-07-03 17 views
45

Jakie jest najlepsze miejsce do przechowywania ustawień konfiguracji aplikacji w AngularJS? Mogą to być stałe aplikacji, wyszukiwania itp., Które mogą być używane zarówno przez kontrolerów, jak i serwisy lub fabryki. Mógłbym stworzyć oddzielną usługę, która przechowuje i pobiera te rzeczy, ale zastanawiałem się, czy istnieje inne właściwe miejsce do ich przechowywania i odzyskiwania.Przechowywanie ustawień konfiguracji aplikacji

Odpowiedz

73

Można używać dostawcy constant()!

app.constant('myAppConfig', {ver: '1.2.2', bananas: 6, hammocks: 3, bananaHammocks: true}); 

Nie różni się to zbytnio od rozwiązania Terry'ego, ale stałe nie zmieniają się, więc są stosowane przed innymi dostawcami. Ponadto moduł ten można wprowadzić do funkcji konfiguracyjnej.

app.config(function(myAppConfig){ 
    console.log(myAppConfig.bananaHammocks); 
}); 

baw

+0

Doskonale, dzięki. Tak, zastanawiałem się, czy było w tym coś konkretnego. – govin

+13

bannanaHammocks ... HA !! – threejeez

+2

tylko dla informacji, możesz ** zmienić ** wartości ** wewnątrz stałej **, jeśli stała to ** obiekt **, jak w powyższym przykładzie. Czytaj dalej [tutaj] (http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/) –

14

Nie wiem, czy istnieje „najlepszy sposób”, ale ja osobiście skorzystać z usługi, o to w skrócie przykład:

angular.module('myApp').factory('AppSettings', function() { 
    return { 
    language: 'en' 
    } 
}); 

angular.module('myApp').controller('myController', ['AppSettings', 
    function(AppSettings) { 
    $scope.language = AppSettings.language; 
    } 
]); 
+0

Hi Terry, jestem noobem ogółem kanciasty. Mam mój plik myApp.js. Zakładam, że tam jest, ale nie jestem pewien, czy dostanę ustawienie. Jak uzyskać wartość języka ?. Dzięki Mark – mark1234

-2

Dodaj to mieć dostęp do zmiennej globalnej

app.run(function ($rootScope) { 
    $rootScope.globalVariable = 'Amadou'; //global variable 
}); 

Teraz, jeśli chcesz używać go z kontrolerem

function appNameCtrl($scope, $rootScope){ 
    $rootScope.globalVariable = 'Modji'; 
} 

W przeglądać

My name is {{globalVariable}} 
+2

Należy unikać wszelkiego rodzaju globali, zwłaszcza gdy są zmiennymi. Konfiguracje są stałymi. – Ashesh

+0

Dlaczego konfiguracje powinny być stałe? Co mam zrobić, jeśli mam konfigurację językową, którą chcę zastosować do wszystkich wywołań interfejsu API do określonego punktu końcowego? – mameluc

+2

@mameluc Następnie użyj usług, a nie zmiennych globalnych. – Styx

3

Można również użyć provider zamiast service i wszędzie można go łatwo używać.

angular.module('App', []).provider('config', 
function() { 
    var conf = { 
     ver: '1.2.2', 
     bananas: 6, 
     hammocks: 3, 
     bananaHammocks: true, 
     baseUrl:'data/' 
    }; 

    conf.$get = function() { 
     delete conf.$get; 
     return conf; 
    }; 

    return conf; 
}); 

Następnie użyj w config jak configProvider:

angular.module('App').config(function(configProvider) {}); 

W biegu, sterowników, usług, ect jako config:

angular.module('App').run(function(config) {}); 

Oto przykład link i code

1

Definicja:

angular.module('starter.config', []) 
.constant('appConfig', { 
    'backend': 'http://localhost:3000/v1' 
}); 

Zastosowanie:

angular.module('starter.services', ['starter.config']) 

.factory('Locations', function(appConfig, $http) { 
    return { 
    all: function(successCb, errorCb) { 
     $http.get(appConfig.backend + '/locations.json') 
     .success(successCb) 
     .error(errorCb); 
    }, 
    get: function(locationId, successCb, errorCb) { 
     $http.get(appConfig.backend + '/locations/'+ locationId +'.json') 
     .success(successCb) 
     .error(errorCb); 
    } 
    }; 
}) 
+0

, więc za każdym razem, gdy potrzebujesz jakiegoś ustawienia, musisz wysłać zapytanie http i/lub przechowywać to, co masz gdzie indziej? wydaje się naprawdę nieskuteczne – Senthe

Powiązane problemy