如何简化这个 switch 语句 (Angular app)

How to simplify this switch statement (Angular app)

我正在使用 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);
});

模态工厂

这就是 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 时,我得到未定义:

function addTickerButton() {
    vs.addTicker = ModalFactory.getModal('addTicker');
    vs.addTicker.show('addTicker);
    $rootScope.$emit("modal.add.tickers");
}

随心所欲

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

您需要的是一个带括号符号的对象访问器:

vm[type] = modal

有关详细信息,请参阅 this link

你离这里很近了:

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

但是您正在尝试访问 vm 上的 returned 属性,该属性不存在。要使用变量检索属性,必须使用括号表示法:

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