Директива с <select ng-options> и косвенным

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

Прежде чем пытаться заключить их в директивы, я построил каждый из них так:

index.html

<select name="groups" ng-model="inputs.groups" ng-change="groupsChanged()" ng-options="g for g in allgroups" multiple></select>

controllers.js

На первом проходе я делаю мои $ http звонки отсюда. Да, я знаю, не лучшие практики, но я хотел доказать, что это работает в первую очередь для меня.

  $scope.loadSelect = function(_url) {
    $http({
      url: _url,
      method: 'POST',
      data: $scope.inputs,
      model: 'all' + _url
    }).success(function(data, status, headers, config) {
      $scope[config.model] = data;
    });
  };

  // Fill groups
  $scope.loadSelect('groups');

  // When groups change, reload other select fields that depend on groups
  $scope.groupsChanged = function() {
    $scope.loadSelect('categories');
    $scope.loadSelect('actions');
  }

Теперь я хочу перенести это в Директиву. Я вижу две основные проблемы: 1.) Как я могу инкапсулировать весь набор опций (например, что сейчас является моделью "allgroups") в Директиву? 2.) Исходя из первоначальных экспериментов, я попытался физически построить<select/> в шаблон, но понял, что мне нужно манипулировать DOM, чтобы физически заменить name, ng-model и ng-options. Это привело меня к атрибуту компиляции, но а.), Который чувствует себя неправильно и б.) Установка<select ng-options="x for x in allgroups" /> фактически не повторяется после того, как он был вставлен в DOM. Использование компиляции не кажется правильным; Как правильно подойти к этому?

Вот моя первая попытка Директивы выглядит следующим образом. Это на самом деле не работает, и я думаю, что я делаю это неправильно:

index.html

<dimension ng-model="inputs.users" alloptions-model="allusers">Users</dimension>

directives.js

directive('dimension', function() {
  return {
    restrict: 'E',
    scope: {
      ngModel: '=',
      alloptionsModel: '='
    },
    template:
        '<div>' + 
          '<label ng-transclude></label>' +
          '<fieldset>' +
              '<div class="form-group">' +
                '&l,t;select ng-model="{{ngModel}}" ng-options="x for x in {{alloptionsModel}}" multiple class="form-control"></select>' +
              '</div>' +
           '</fieldset>' +
        '</div>',

    replace: true,
    transclude: true
  };
});

Ясно, что я даже не дошел до части загрузки сервера, но я планирую свернуть это в контроллер в Директиве с фактическим вызовом $ http в службе.

Я чувствую, что двигаюсь по неправильному пути. Если у вас есть предложения по перестройке, пожалуйста, помогите!

Ответы на вопрос(1)

Ваш ответ на вопрос