2013-06-29 12 views
65

próbuję zbudować moduł myApp.config do przechowywania ustawień dla mojej aplikacji Moduł napisałem config.js plik:
angularjs - Pierwsze stałe ze sterownikiem

angular.module('myApp.config', []) 
    .constant('APP_NAME','My Angular App!') 
    .constant('APP_VERSION','0.3'); 

I dodaniu go do moi app.js (kątowe-nasienne):

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'myApp.controllers', 'myApp.config']). 

dodałem go do pliku index.html, a teraz próbuję dowiedzieć się, jak je zdobyć w moim kontrolerów, próbowałem:

angular.module('myApp.controllers', ['myApp.config']) 
    .controller('ListCtrl', ['$scope', 'myApp.config', function($scope, $config) { 
    $scope.printme = $config; 
    }]) 

ale dostaję:

wiadomo dostawcy: myApp.configProvider < - myApp.config

Jestem prawdopodobnie robi coś złego tutaj, jakieś pomysły?

+0

Asaf próbowano wprowadzić moduł jako zależność w kontrolerze, który nie będzie działał. Moduł może być zależny tylko od innego modułu. – Shivam

Odpowiedz

84

Nie sądzę, że prawidłowe jest używanie nazwy modułu w takim zastrzyku. Można po prostu wstrzyknąć stałych według nazwy, choć:

angular.module('myApp.controllers', ['myApp.config']) 
    .controller('ListCtrl', ['$scope', 'APP_NAME', function($scope, appName) { 
    $scope.printme = appName; 
}]); 
+4

Prawidłowo, istnieje jedna globalna przestrzeń wtrysku zależności, po skonfigurowaniu '.constant' w dowolnym module można wprowadzić wartość nigdzie indziej. – jpsimons

+6

Czy ogólnie rozsądnym sposobem jest posiadanie pliku konfiguracyjnego (w celu dostosowania ustawień) w Angular? – Asaf

+0

@Asaf możesz przejść z następującą usługą .constant. 'angular.module ('app'). constant ('appSettings', {version: '1.0', appName: 'myApp'});' Następnie wprowadź go do kontrolera, pliku .config lub innego podobnego do 'kanciastego. module ('app'). controller ('simpleCtrl', ['appSettings', funkcja (appSettings) {$ scope.valueInIsolatedScope = appSettings.version;}]) ' – hastrb

71

Myślę, że najprostszym sposobem jest dodanie stałej przy użyciu przedmiotu dosłowne. Przypomina to większość przypadków użycia konfiguracji aplikacji, ponieważ obsługuje złożony obiekt konfiguracyjny. Krok constant również jest uruchamiany wcześnie, są rejestrowane before other providers.

angular.module('myApp').constant('cfg', { 
    url: 'https://myapi.com/v1/', 
    httpTimeout: 5000 
}) 

Aby z niej skorzystać wystarczy wstrzyknąć cfg:

angular.module('myApp').factory('user', function(cfg, $http){ 
    // cfg and $http together at last 
}) 
+0

Dokładnie to, czego szukałem! – Devner

+0

Mam stałego dostawcę z kluczowymi kodami używanymi do nawigacji i chciałbym wprowadzić stały dostawca do kontrolera (chcę uniknąć wstrzykiwania każdego wpisu osobno). Czy to jest możliwe? Mam już wstrzyknięte inne usługi. – owczarek

+0

Jest to trudniejsze niż: 'angular.module ('myApp'). Constant ('keyCodes', {left: 36, right: 38}) '' i: 'angular.module (' myApp '). Factory (' myComponent ', function (keyCodes) {keyCodes.left}) '? – SimplGy

3

Należy również zauważyć, że rozwiązanie SimplGy oznacza, że ​​„cfg” obiekt jest stała, jednak właściwości tego obiektu nie są. Oznacza to, że nie można przypisać „cfg” tak:

cfg = { randomProperty: randomValue }; 

Można zmienić właściwości „cfg” obiektu tak:

cfg.url = 'BrandNewURL.com'; 
cfg.httpTimeout = 30; 
+0

To nie odpowiada na pytanie. Odpowiedzi na inne odpowiedzi powinny być napisane jako komentarze. –

+0

@KenWayneVanderLinde Apologies Ken. Niestety, nie zebrałem wystarczającej liczby przedstawicieli, aby to skomentować, ale pomyślałem, że ważne jest, aby autor był świadomy problemów, które mogą się zdarzyć przy użyciu "Stałego" Angulara. –

+0

@MattM Myślę, że nic ci nie jest. Dopasowanie tego do komentarza byłoby niemożliwe. – carmenism

1

wyboru Użyj stałych w poniższym przykładzie:

angular 
.module('abp001App', ['ngRoute']) 
.constant("myConfig", { 
    "url": "http://localhost", 
    "port": "80" 
}) 
.config(function ($routeProvider) { 
    $routeProvider 
     .when('/', { 
      templateUrl: 'views/main.html', 
      controller: 'MainCtrl' 
     }) 
     .otherwise({ 
      redirectTo: '/' 
     }); 
}) 
.controller('MainCtrl', function (myConfig) { 
    // Do something with myConfig... 
}); 

Zobacz cały artykuł na angularjs stałych dobrych praktyk here

+0

roger, że @ryanyuyu dzięki –

Powiązane problemy