2016-02-11 4 views
2

Предположим, что у меня есть глобальная константа, которая должна быть доступна во всех угловых модулях, что является целесообразным подходом к объявлению константы. У меня есть три подхода в моем уме, но я не уверен, что использовать.Угловая константа vs константа javascript

Цените, если кто-нибудь может указать, какое преимущество использует подход 2, сравнимый с Подходом 1 в этом состоянии.

Подход 1 (чистые JS постоянные):

var jsConstant = { 
    constant1: 'constant1', 
    constant2: 'constant2' 
}; 

angular.module('mainApp').controller(['$scope', function($scope) { 
    $scope.constant1 = jsConstant.constant1; 
    $scope.constant2 = jsConstant.constant2; 
}]); 

Подход 2 (чистый угловая константа)

angular.module('mainApp').constant('angularConstant', { 
    'constant1': 'constant1', 
    'constant2': 'constant2' 
}); 


angular.module('mainApp').controller(['myConstant', '$scope', function(myConstant, $scope) { 
    $scope.constant1 = angularConstant.constant1; 
    $scope.constant2 = angularConstant.constant2; 
}]); 

Подход 3 (смесь Js и угловой константы)

var jsConstant = { 
    constant1: 'constant1', 
    constant2: 'constant2' 
}; 

angular.module('mainApp').constant('angularConstant", { 
    'constant1': jsConstant.constant1; 
    'constant2': jsConstant.constant2; 
}); 


angular.module('mainApp').controller(['myConstant', '$scope', function(myConstant, $scope) { 
    $scope.constant1 = angularConstant.constant1; 
    $scope.constant2 = angularConstant.constant2; 
}]); 
+0

1 и 2 идентичны – zerkms

+0

Вы можете создать сервис и ввести его. Пусть служба возвращает константу. –

+0

@zerkms Я изменил код для 2 – vincentsty

ответ

1

Рекомендованным способом является использование constant:

(function(angular, undefined) { 
 
'use strict'; 
 

 
angular.module('myApp.constants', []) 
 

 
.constant('appConfig', {userRoles:['guest','user','admin']}); 
 

 
})(angular);

Даже лучший способ, чтобы придать эти значения на каждом построить с сервера, так как большую часть времени вы хотите, чтобы определить эти значения на вашем сервере и забыть об управлении их в других местах. Для этого посмотрит на ng-constant модуле для grunt или gulp

Edit подхода 3 просто грязный вариант подхода 2 ненужного объявлением переменных JS вне угловых модулей

подхода-не хорошо , потому что вы эти константы не могут быть повторно использованы повторно. Если у вас есть другой контроллер, который хочет повторно использовать эти значения?

+0

Я смущаюсь. что вы подразумеваете под постоянным в подходе 1, нельзя использовать повторно? мне кажется, что подход 1 константа javascript может быть повторно использован в каждом контроллере следующим образом: var jsConstant находится в другом файле js, а файл js загружается в мастер-макет – vincentsty

+0

Загружено предыдущее угловое приложение? Что делать, если есть другой модуль, который повторно использует/изменяет эти переменные? – Yerken

0

В подходе 1 вы создали глобальную переменную jsConstants, которая, я считаю, не считается хорошей практикой - вы должны избегать создания глобальных констант, если это возможно. Более того - свойства jsConstants на самом деле не постоянны - любой, где угодно, может их изменить. Кроме того, использование глобальной константы делает контроллеры менее проверяемыми (единицами), так как они будут зависеть от этого глобального объекта.

В подходе 2 Я считаю, что вам не разрешено изменять эти значения, поэтому они больше действуют как постоянные значения. Вы вводите их в контроллеры, поэтому они все еще проверяются на единицу.

Смежные вопросы