Как упростить этот оператор переключения (приложение Angular)

0

Я использую modalService для хранения модальных шаблонов в моем mainController.

Вот как я их храню (от mainController)

// Store popup modal:
$ionicModal.fromTemplateUrl('app/popup/popup.html', {})
.then(function(modal) {
    PopupFactory.storeModal(modal);
});

// Store addTicker modal:
$ionicModal.fromTemplateUrl('app/tickers/addTicker.html', {})
.then(function(modal) {
    ModalFactory.storeModal('addTicker', modal);
});

modalFactory

Это то, что storeModal функция storeModal:

function storeModal(type, modal) {
    switch(type) {
        case 'addTicker':
            vm.addTicker = modal;
            break;
        case 'addTag':
            vm.addTag = modal;
            break;
    }
}

^, как вы можете видеть, мне нужно создать объект для каждого модального приложения.

Вот как выглядит функция getModal:

function getModal(type) {
    switch(type) {
        case 'addTicker':
            return vm.addTicker;
            break;
        case 'addTag':
            return vm.addTag;
            break;
        case 'anotherModal':
            return vm.anotherModal;
            break;
        case 'yetAnotherModal':
            return vm.yetAnotherModal;
            break;
    }
}

Я чувствую, что этот код может быть оптимизирован для 1 или 2 строк...


Я пробовал следовать безрезультатно:

function getModal(type) {
    return vm.+type;
}

а также

function getModal(type) {
    var returned = type;
    return vm.returned;
}

Однако, когда я вызываю getModal в соответствующих контроллерах директивы, я получаю undefined:

function addTickerButton() {
    vs.addTicker = ModalFactory.getModal('addTicker');
    vs.addTicker.show('addTicker);
    $rootScope.$emit("modal.add.tickers");
}
Теги:
angularjs-scope
angularjs-service

3 ответа

1
Лучший ответ

Вы здесь очень близко:

function getModal(type) {
    var returned = type;
    return vm.returned;
}

Но вы пытаетесь получить доступ к returned атрибуту на vm, которого не существует. Чтобы получить атрибут с использованием переменной, вы должны использовать нотацию в виде скобок:

function getModal(type) {
    return vm[type];
}
  • 0
    Спасибо! И спасибо за объяснение, я знал, что это было что-то вроде этого, но синтаксис ускользал от меня ...
1

Просто делать

function getModal(type) {
    return vm[type];
}
1

То, что вам нужно, это аксессор объекта с записью в скобках:

vm[type] = modal

См. Эту ссылку для получения более подробной информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню