Я использую 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
функция 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");
}
Вы здесь очень близко:
function getModal(type) {
var returned = type;
return vm.returned;
}
Но вы пытаетесь получить доступ к returned
атрибуту на vm
, которого не существует. Чтобы получить атрибут с использованием переменной, вы должны использовать нотацию в виде скобок:
function getModal(type) {
return vm[type];
}
Просто делать
function getModal(type) {
return vm[type];
}
То, что вам нужно, это аксессор объекта с записью в скобках:
vm[type] = modal
См. Эту ссылку для получения более подробной информации.