如何简化此switch语句(Angular app)

时间:2015-11-30 19:35:07

标签: javascript angularjs angularjs-scope angularjs-service

我正在使用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函数的样子:

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");
}

3 个答案:

答案 0 :(得分:1)

只做

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

答案 1 :(得分:1)

您需要的是带括号表示法的对象访问器:

vm[type] = modal

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

答案 2 :(得分:1)

你离这儿很近:

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

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

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