Я наткнулся на ваш вопрос, пытаясь придумать решение, подобное вашей заботе.
Поскольку у меня был problem, касающийся навигации по моим маршрутам, я решил использовать $ionicModal
, чтобы показать вид другого состояния в модальном виде. Я придумал решение I crafted there (но я еще не реализовал его для моего рабочего контекста), который должен работать в моем случае, хотя я не очень доволен им.
Подводя итог, все мои состояния вложены под tabs
; когда я нахожусь в состоянии tabs.home
, я хочу прямо показать состояние tabs.settings.sub
. Однако tabs.settings.sub
опирается на данные, заполненные его родительским состоянием tabs.settings
. Отсюда моя проблема с предоставлением объема моего текущего состояния (tabs.home
) до tabs.settings.sub
.
Мой модальный использует шаблон, который будет включать в себя шаблон с моей точки зрения:
<script id="templates/modal.html" type="text/ng-template">
<ion-modal-view>
<ng-include src="templateUrl" ng-controller="controller"></ng-include>
</ion-modal-view>
</script>
Затем я могу повторно использовать мнение со стороны государства. Что касается сферы применения, я использовал $scope.new(true)
, чтобы изолировать его, и заселил ее с данными, необходимых моим модальным шаблоном:
var subState = $state.get ('tabs.settings.sub');
var subScope = $scope.$new (true); // true: isolate
subScope.title = 'Sub';
subScope.templateUrl = subState.templateUrl;
subScope.controller = function() {
if (subState.controller)
return $controller (subState.controller, {$scope:subScope});
return null;
};
Модальным конкретизируются с помощью этой сферы (это одна проблемы, на мой взгляд: смешивание сферы модального и объем контроллера). controller
должен быть функцией, которая возвращает соответствующий контроллер.
$ionicModal.fromTemplateUrl ('templates/modal.html', {
scope: subScope
}).then (function (modal) {
modal.show();
});
Основная проблема с моим решением является данными транзита до контроллера зрения, чтобы показать (в данном случае SubCtrl
). Но он более сужен для моего конкретного контекста: мой модальный не знает о цепочке наследования контроллеров adn, потому что это обрабатывается маршрутизатором пользовательского интерфейса.
Я не знаю, можно ли получить доступ к состоянию, связанному с контроллером (обычный шаблон, похоже, должен использовать $state.parent
, но здесь это невозможно использовать, как указано UI router wiki).
Обойти я использую здесь (это та часть, я не доволен), чтобы федеративные данные через штаты:
.state ('tabs.settings', {
data: { status: 'valid' }
}
у меня есть доступ к нему при создании моей модальности:
subScope.status = subState.data.status;
И у меня есть доступ к нему от родительского контроллера:
$scope.status = $state.current.data.status;