Угловой 1.5. компонент - каков наилучший способ отличить родительский контроллер через свойство binded?

У меня есть компонент AngularJS 1.5, который представляет выпадающий список с опциями ng. Особенность заключается в том, что эти параметры ng динамически заполняются различными данными (из константных файлов), в зависимости от значения свойства name, которое привязано к компоненту и поступает от родительского контроллера.
Например, мой компонент выглядит так:

test.component.js

angular
    .module('test.component')
    .component('Selector', {
        controller: Selector,
        controllerAs: 'vm',
        templateUrl: 'selector.html',
        bindings: {
            model: '=',
            form: '<',
            name:'@',
            label:'@',
            constant: '<',
        }
    });
    function Selector(CONSTANTS, SOME_OTHER_CONSTANTS) {
        var vm = this;
        switch(vm.name) {
            case 'Name1':
            vm.constant = CONSTANTS;
            break;

            case 'Name2' :
            vm.constant = SOME_OTHER_CONSTANTS;
            break;
        }

    }

Итак, с точки зрения родительского контроллера, это выглядит так:
Родитель-view.html

<selector
  name="Name1"
  form="vm.myForm"
  model="vm.myModel>
</selector>

Это работает нормально, но, возможно, не стоит отличать родительский контроллер от данных через name свойство, поскольку оно используется в основном для проверки формы. Что лучше использовать, чтобы выделить родительский контроллер, чтобы иметь возможность заполнять различные данные в ng-опциях в зависимости от этого?

Любая помощь и предложения будут с благодарностью.

1 ответ

Решение

Если у вас есть только 2 из этих констант - используйте, если кажется, что все в порядке, если у вас есть как 20 различных, вы можете пойти с инжектором:

function Selector($injector) {
        var vm = this;
        vm.constant  = $injector.get(constantProvider);    
    }

<selector
  constant-provider="SOME_OTHER_CONSTANTS"
  form="vm.myForm"
  model="vm.myModel>
</selector>

Если у вас есть несколько мест, где вы хотите обращаться к константам по именам, вы можете попробовать создать отдельную фабрику для хранения всех этих маленьких констант:

module.factory('MyConstants', function(CONSTANTS, SOME_OTHER_CONSTANTS) {
  return {
    name1: CONSTANTS, name2: SOME_OTHER_CONSTANTS
  }
});
Другие вопросы по тегам