如何简化这个 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];
}
我正在使用 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];
}