Процесс внедрения этого кода на каждой странице, где мне понадобится список штатов, утомителен. Самый быстрый способ решить эту проблему - вынести штаты в провайдер значений.
.controller('ContactFormCtrl', function($scope, states) { //inject the value
//lots of code
$scope.states = states
});
Теперь наши штаты не будут дублироваться, если мы решим подключить наш селектор штатов в нескольких местах. Однако, нам все же потребуется добавлять states в зависимости к каждому контроллеру, где нам потребуется список штатов. Мы можем пойти дальше и вынести функционал в директиву для того, чтобы нам больше не пришлось указывать states в области видимости элемента select . Мы удалим упоминание штатов из contact_form.js и переместим зависимость в директиву.
1
2
3
4
5
6
7
8
9
10
11
12
13
angular.module('canHazApp')
.directive('stateOptions', function (states) { //states value injected into directive context
return {
restrict: 'E',
replace: true,
scope: true, //we want a separate child scope
template: '<select ng-options="state.abbreviation as state.name for state in states"></select>',
require: '^ngModel',
link: function(scope, element, attrs) {
scope.states = states;
}
};
});
Теперь мы можем использовать нашу директиву в любом месте приложения и получать список штатов в виде опций для выбора.
Коротко опишите ваши идеи или просто прикрепите файл с готовым ТЗ. Мы свяжемся с вами в течение 1 дня и подробно расскажем о том, как мы можем вам помочь.