angularjs - page - ng title angular 4



Нарушение MVC в ионной(угловой) структуре с помощью $ ionicModal (1)

Я наткнулся на ваш вопрос, пытаясь найти решение, подобное вашей заботе.

Поскольку у меня была проблема с навигацией по моим маршрутам, я решил использовать $ionicModal чтобы показать вид другого состояния в модальном виде. Я придумал решение, которое я создал там (но я еще не реализовал его для моего рабочего контекста), который должен работать в моем случае, пока я не очень доволен этим.

Подводя итог, все мои состояния вложены под 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 , но это не может быть использовано здесь, как упомянуто в wiki-интерфейсе пользовательского интерфейса ).

Обходной путь, который я использую здесь (это та часть, которой я не удовлетворен), заключается в объединении данных через состояния:

.state ('tabs.settings', {
  data: { status: 'valid' }
}

У меня есть доступ к нему при создании моего модального:

subScope.status = subState.data.status;

И у меня есть доступ к нему из родительского контроллера:

$scope.status = $state.current.data.status;

При работе с $ionicModal в Ionic Framework я заметил, что многие люди $ionicModal экземпляр Modal внутри контроллера и передают область управления Modal. Вот так,

   $ionicModal.fromTemplateUrl("views/call_options_view.html", function ($ionicModal) {

        $scope.menu = $ionicModal;

   }, {

        scope: $scope,
        animation: "slide-in-up"

   });

Это позволяет модально вызывать методы в области контроллера. Есть ли способ, которым мы можем дать отдельному контроллеру Modal? Прямо сейчас, используя область управления, нет ли нарушения MVC? Контроллер имеет два вида. Предположим, что я хочу, чтобы тот же доступный модальный доступ был на другом контроллере, тогда мне пришлось бы дублировать мои функции для модального на обоих контроллерах. Предполагается, что MVC улучшает повторное использование кода. Поэтому, по сути, я хочу повторно использовать MVC, предоставляя свой модальный отдельный контроллер.

Один из способов подумать об этом - это установить модальный корневой контроллер. Это сделает его доступным для всех дочерних контроллеров, а функциональность для модального будет доступна только в корневом контроллере. Мне все еще не нравится это исправление, потому что я не хочу загромождать свой корневой контроллер слишком большим количеством логики.

Любые другие предложения?





modalviewcontroller